열심히 코딩 하숭!

4. 예측 함수 정의하기 | 파이토치 딥러닝 프로그래밍 본문

프로그래밍 책/파이토치 딥러닝 프로그래밍

4. 예측 함수 정의하기 | 파이토치 딥러닝 프로그래밍

채숭이 2024. 4. 17. 17:03

04 예측 함수 정의하기

4.1 머신러닝 알고리의 전체상과 예측함수

  1. 경사 하강법의 구현 개요
    • 예측 계산 → 손실 계산 → 경사 계산 → 파라미터 수정
    • 예측 계산: 입력으로부터 출력을 계산함l
    • 손실 계산: 정답과 출력간의 오차를 계산함
    • 경사 계산: 손실 함수를 미분하여 경사값을 구함
    • 파라미터 수정: 경사값을 활용해 손실을 최소화시키는 W와 B를 반복 수정함
  2. 예측 함수 구성
    • 레이어 함수 여러 층을 조합해서 예측 함수를 구성한다
    • 레이어 함수: 선형 함수, ReLU 함수 등

4.2 신경망의 개념과 파이토치 프로그래밍 모델의 관계

  1. 신경망과 파이토치 프로그램의 대응 관계

 

💡 헷갈리는 부분: 선형 함수의 자리와 비선형 함수의 자리가 고정되어야 하는지?
  • 선형 함수 자리에는 무조건 선형 함수만 와야하나!!?
    • 아니다!
    • 컨볼루션, RNN 함수 등도 선형 함수 자리에 와서 그 역할을 수행할 수 있다
  • 만약 파라미터가 없는 비선형 함수로만 구성될 경우도 있나? 있다면, 학습시 파라미터 조정은 아예 하지 않는건가?
    • 특정한 문제에 대해 모델을 최적화하는 과정에서 일부 연산을 제한할 필요가 있는 경우에 선형 함수를 사용하지 않을 수 있다
    • 보통, 비선형 함수는 따로 파라미터 조정이 이루어지지 않음. 고정된 형태를 가지고 있으며, 입력에 대한 고정된 변환만 수행함!
    • 비선형 함수는 모델의 표현력을 향상시키는 데 사용되지만, 학습 중에는 파라미터 최적화의 대상이 아니기 때문에 보통은 신경망의 “은닉층”에서만 사용된다 (”학습”을 위해서는 선형 함수가 꼭 필요하다!!!라고 느껴짐)
  • 선형 함수가 없는 모델도 있나?
    • 대부분의 신경망은 선형 함수를 포함하고 있다
  • 선형 함수의 자리는 뭐라고 불러?
    • "선형 계층(linear layer)" 또는 "선형 변환(layer)” </aside>

 

4.3 파이토치 프로그래밍에 필요한 용어 정의

  1. 레이어 함수
    • 텐서를 입력으로 받고 계산 후 출력함
    • 머신러닝 모델은 여러 레이어 함수들을 조합해서 제작
함수명 파라미터 유무 명칭 모델 종류
nn.Linear O 선형 함수 5 회귀
nn.Sigmoid X 시그모이드 함수 6 이진 분류
nn.LogSoftmax X 소프트맥스 함수 + 로그 함수 7 다중 분류
nn.ReLU X ReLU 함수 8 숫자 인식
nn.Conv2d O 컨볼루션 함수 9 이미지 인식
nn.MaxPool2d X 풀링 함수 이미지 인식
nn.Flatten X 1계화 함수 이미지 인식
nn.Dropout X 드롭 아웃 함수 10 이미지 인식
nn.BatchNorm2d O 배치 규격화 함수 이미지 인식
nn.AdaptiveAvgPool2d X 적응형 평균 풀링 함수 11 사전 학습 모델

 

  • ReLU 함수와 같은 활성화함수는 레이어 함수로 정의하고 있지 않지만, 이 책에서는 그냥 레이어함수랑 같은 부류로 취급한다고 함!

 

  2. 파라미터

  • 레이어 함수 내부에서 가지고 있는 입력 텐서 이외의 데이터!
  • 학습을 통해 레이어 함수의 파라미터 값을 조정함
  • 위의 표에서는 ‘선형함수, 컨볼루션 함수, 배치 규격화 함수’만 파라미터를 가짐

  3. 입력 텐서 / 출력 텐서

  4. 머신러닝 모델

  • 여러 개의 레이어 함수를 조합해 입력 텐서에 대해 바람직한 출력 텐서를 출력

5. 학습

  • 레이어 함수 내부의 파라미터 값을 조정하는 행위

 

  1.  
  1.  

4.4 예측 함수의 내부 구조

  1. 예측 함수의 간략한 구현
    • 주의 은닉층의 노드의 수를 맞춰주어야 한다
    • 주의 입력과 출력도 데이터의 특성에 숫자를 맞추어야 한다
## 레이어 함수 정의 ##
l1 = nn.Linear(784, 128) # 128은 은닉층의 노드 수
l2 = nn.Linear(128, 10) # 128은 은닉층의 노드 수
relu = nn.ReLU(inplace=True)

## 입력 텐서 -> 출력 텐서 계산 ##
[inputs = torch.randn(100, 784)
m1 = l1(inputs)
m2 = relu(m1)
outputs = l2(m2)

 

  2. 직렬로 이어지는 합성 함수 → nn.Sequential 로 간결하게 표현

net2 = nn.Sequential(
	l1,
	relu,
	l2)

outputs2 = net2(inputs)

4.5 외부에서 본 예측 함수의 거동

pass

4.6 파이토치 머신러닝 프로그램의 전체상

 

전체적인 구조

  (1) 예측 함수

  (2) 손실 함수

  (3) 최적화 함수

 

반복 처리

  ① 예측 계산

  ② 손실 계산

  ③ 경사 계산

  ④ 파라미터 수정

 

4.7 활성화 함수의 목적

  1. 활성화 함수 사용 이유

  • 선형함수 3개로 이루어진 예측 모델의 은닉층에 활성화 함수가 추가되지 않으면 비선형 예측이 불가함
  • (단순히 선형 함수를 합성해 놓기만 하면, 결국 한 개 층의 선형 함수와 같다)