딥러닝 정리 - 1 딥러닝 기본적 학습방법

novice developer·2024년 2월 28일

Saltlux

목록 보기
21/22

딥러닝

딥러닝 은 입력층과 출력층 사이에 여러 개의 은닉층으로 이루어진 신경망!

층이 깊어질수록 모듈과 함수에 따른 파라미터(hyper-parameter) 도 비례하여 많아짐
이 파라미터를 결정하여 모델이 정확하게 결과를 뱉어낼 수 있도록 하는 것이 학습의 핵심!

핵심

그러기 위해 Loss Function을 !!정의!! 하여야하고, 그리고 Loss Function을 !!최적화!! 해야한다.

Optimization - 최적화

딥러닝 학습시 최대한 틀리지 않는 방향으로 학습해야함!

얼마나 틀리는지(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 역전파

  1. 데이터 불러오기
  2. model 정의
    2-1.Sequential로 model정의
    Sequential이란? - 간단한 순차적인 구조를 가진 모델을 쉽게 구성 가능 즉, !! 입력층부터 출력층 까지 쌓는것 !!
    bias = True wx+b의 b값을 수정가능하게하여 y절펼을 바꿈
    생성후 add()메서드로 입력층와 은닉층 추가할수있다

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) 하면 된다

  1. 학습 방식 설정 - 완
criterion = torch.nn.MSELoss()
# 최적화 알고리즘 선택 및 하이퍼파라미터 설정
# lr: 학습률(learning rate), 기본값은 0.01
optimizer = torch.optim.SGD(model.parameters(), lr=1e-3)

https://wikidocs.net/194971

profile
초보개발자

0개의 댓글