딥러닝 은 입력층과 출력층 사이에 여러 개의 은닉층으로 이루어진 신경망!
층이 깊어질수록 모듈과 함수에 따른 파라미터(hyper-parameter) 도 비례하여 많아짐
이 파라미터를 결정하여 모델이 정확하게 결과를 뱉어낼 수 있도록 하는 것이 학습의 핵심!
그러기 위해 Loss Function을 !!정의!! 하여야하고, 그리고 Loss Function을 !!최적화!! 해야한다.
딥러닝 학습시 최대한 틀리지 않는 방향으로 학습해야함!
얼마나 틀리는지(loss)를 알게 하는 함수가 loss function(손실함수)입니다.
loss function 의 최솟값을 찾는 것을 학습 목표로 합니다.
최소값을 찾아가는 것 최적화 = Optimization
이를 수행하는 알고리즘이 최적화 알고리즘 = Optimizer 이다.
학습속도를 빠르고 안정적이게하는 것을 목표
4번 목차에서의 내용을 좀 더 자세히 보면
for step in range(2000): # 에폭
optimizer.zero_grad() # 1. 동적신경망이므로 초기화 해야함.
y_hat = model(x_data) # 2. 주어진 데이터를 모델에 넣고 예측된 결과값 얻기
# loss function
# 예측한 결과값과 실제 값으로 loss값 얻기
# criterion 분류 기준 = RSME, cross entropy 등 정의 가능 (이번엔 회귀라서 MSE입니다! 분류는 이방법이 아니라고하셨어요)
loss = criterion(y_hat, y_data)
loss.backward() # 역전파로 gradint값 얻기!
optimizer.step() # parameters를 한꺼번에 업데이트 한다.
print("epoch: ", step, "error : ", loss.item()) # step는 현재 반복문의 차시 error은 기울기!
summary(model, (반대로 열과 행)
0 역전파는
1단계 feedforward 순전파
2단계 손실계산
3단계 vackpopagation 역전파
class 부분
nn.Linear(input_dim,output_dim)
입력되는 x의 차원과 출력되는 y의 차원을 입력해 주면 된다.
단순 선형회귀는 하나의 입력 x에 대해 하나의 입력 y가 나오니
nn.Linear(1,1) 하면 된다
forward(self, x) 메서드는 클래스의 객체가 호출될 때 실행되는 메서드로, 모델이 입력 데이터를
받아 출력을 계산하는 로직
2-2.Subclass로 model정의
3.학습 방식 설정 : loss & optimizer 정의
4.모델 학습
5.모델 평가
단어 키워드:
에폭 : 전체데이터를 몇번 볼지!(※ 에폭이 끝나야 업데이트가 된다합니다.)
배치 : 전체데이터를 나눠서 훈련!
개념 키워드
선형 vs 비선형 => 미분 가능하게(굴곡있는것이) 비선형
첫 빙하기 => XOR 해결못함.. 하나의 퍼셉트론으론ㅜ.. 그래서 다중퍼셉트론 등장!
두번째 빙하기 =>오버피팅, 기울기소실, 너무많은연산으로인한 짱느림
기울기 소실 : 역전파에서 기울기를 구해서 모델로 학습 해야하는데 기울기가 사라져서 학습이 안됨
스칼라, 백터, 행렬, 텐서 => 차원 표기 수학적 어캐표시하는지 알기
torch.nn 이란? 머신러닝 교과서 파이토치편 책 512p참조
신경망 구축과 훈련을 위해 우아하게 고안된 모듈 몇 줄의 코드로 프로토 타입을 쉽게 만들고 복잡한 모델을 구성
추천하는 영상
인공신경망과 퍼셉트론https://youtu.be/h7HUn-Sc740?si=MrD1zFumjKWgeCng
오늘 공부할꺼
1. torch.nn 넌 누구냐 -
torch.nn 이란? 머신러닝 교과서 파이토치편 책 512p참조
신경망 구축과 훈련을 위해 우아하게 고안된 모듈 몇 줄의 코드로 프로토 타입을 쉽게 만들고 복잡한 모델을 구성
2. 재귀 생성자 맞지, 연결연산자 없냐 걍 멤버함수 바로 접근 하게한다거?
class MultiRegression(nn.Module):
def init(self, input_size, output_size):
super(MultiRegression, self).init() <= 재귀 생성자 맞지
self.linear = nn.Linear(input_size, output_size)
def forward(self, x):
return self.linear(x)
2답
부모꺼의 생성자를 자동오버라이드를 하기때문에 super(본인클래스 명시, self).init()을 하는거네요
2-1 nn.Linear(input_size, output_size) 행과열 넣는건 알지만 뭔지 정확히 알 필요있을듯
2-1 답
입력되는 x의 차원과 출력되는 y의 차원을 입력해 주면 된다.
단순 선형회귀는 하나의 입력 x에 대해 하나의 입력 y가 나오니
nn.Linear(1,1) 하면 된다
criterion = torch.nn.MSELoss()
# 최적화 알고리즘 선택 및 하이퍼파라미터 설정
# lr: 학습률(learning rate), 기본값은 0.01
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)
https://wikidocs.net/194971