requires_grad= True로 줌으로써 이 변수는 나중에 편미분을 해야한다고 알려줌.
이게 뭐해준걸까 ?
1개의 연산을 한번에 진행한 것이다. torch.ones(3,10)으로 바꾸면 [[1,1,1,1,1,1,1,1,1,1]*3개]가 되는것이고, 각각의 row에 대해서 Wx+b를 수행해서 10+5가 3개 만들어진다. 즉, 각각의 row를 data라고 할 때, 3번의 연산을 한번에 수행한 것이다.
여기에서 view함수는 reshape함수와 비슷하다. 즉, view(-1,1)은 데이터가 얼마나 들어올진 모르겠지만 (1,100)이던 뭐던, 잘 모르겠고 벡터화 좀 시켜줘라 (1,15) => (15,1)
float()을 해주는 이유는 numpy에서는 float64를 이용하는데, torch에서는 float32를 사용하기 때문
SGD(stochastic Gradient Descent)
Adam
둘간의 차이는 torch.optim.SGD를 썼냐 , torch.optim.Adam을 썼냐의 차이밖에 없다.
코드라인순서대로 보면
1. input =1, output 1인 Linear모델을 만들고
2. optimization function을 설정해주면서 1에서 만들 모델의 parameter들을 넣어주면서, learning rate을 설정한다.
3. step(epoch) 몇번이나 학습시킬지를 설정해준 값만큼 도는데,
3-1. lin_model에서 xs값으로 y'(예측치)를 만들고
3-2. criteria(y',y)간의 오차를 계산한다.
3-3. opt.zero_grad()는 이전 step에서의 opt값들이 그대로 남아있게 되니 초기화를 시켜주는 코드고
:
# 역전파 단계 전에, Optimizer 객체를 사용하여 (모델의 학습 가능한 가중치인)
# 갱신할 변수들에 대한 모든 변화도를 0으로 만듭니다. 이렇게 하는 이유는
#기본적으로 .backward()를 호출할 때마다 변화도가 버퍼(buffer)에 (덮어쓰지 않고)
# 누적되기 때문입니다. 더 자세한 내용은 torch.autograd.backward에 대한 문서를
# 참조하세요.
3-4. criteria(y',y)에서 나온 loss에 대해서 backpropagation을 수행한다.
: 즉, 모델의 매개변수에 대한 손실의 변화도를 계산한다(편미분계산)
3-5. opt.step()
: 위를 바탕으로 매개변수를 갱신하게 된다.
'인공지능 > Reinforce_Learning' 카테고리의 다른 글
강화학습 기초내용 contents (1) | 2021.06.10 |
---|---|
[PART5] 심층강화학습 DQN (1) | 2021.01.30 |
[PART 03] CH02. 심층 신경망을 활용한 함수근사(선형근사) (0) | 2020.12.29 |
[PART3] CH01. 함수근사 소개 (0) | 2020.12.25 |
[Part2] CH05. Off-policy TD contorl과 Q-Learning (0) | 2020.12.23 |