본문 바로가기
머신러닝/기초 공부

[딥러닝] 기초 및 꿀팁 2

by 와플킴 2022. 9. 15.
728x90

loss를 미분할 때 chain rule

 

w.grad = dloss / dw

 

loss(backward 당하는 객체)는 무조건 스칼라값이어야 함

c = 3 * a

c = c.sum()

c.backward()

print(a.grad)

=> 3

 

self.linear = torch.nn.Linear(1, 1)  # input, output이 각각 하나

 

criterion = torch.nn.MSELoss(reduction='sum')

optimizer = torch.optim.SGD(model.parameters(), lr=0.01)

 

GD는 dataset을 전체로, SGD는 batch 이용 (memory 과부하 문제 해결, outliar 묻힘 문제 해결)

batch는 32와 1024 사이 2의 제곱수로 이용하는 것이 좋음

 

 

optimizer.zero_grad()

losss.backward()

optimizer.step()

 

torch.optim.Adam

기존 * 0.9 + 최신 * 0.1

local minimum에 빠지지 않고 global minimum으로 갈 수 있음

** Adam은 lr 0.001이 최댓값.. 좀 작게 줘야 함, SGD는 0.1 까지 줘도 됨

 

적응적 학습률

sample이 들어올 때 마다 학습률이 바뀌는 것

r += g^2

1/r^(0.5) * lr

 

MSE에서 발생되는 gradient는 낮음

cross-ent 는 틀린 경우 거의 무한대

그래서 logistic regression 할 때는 거의 bce, ce 사용

 

하나의 값만 있을 때는 시그모이드 굿

1000개의 class 중 확률 분포를 나타낼 때는 시그모이드 안 씀

 

BCELoss 일 때만 sigmoid, 값이 클 때는 softmax

 

L1, MSE, SmoothL1, BCE, KLDiv

Adam, SGD

728x90

댓글