전공공부/인공지능

딥러닝 학습방법 이해하기: 신경망, softmax, 활성함수, back propagation

prefer_all 2022. 7. 25. 10:48
<목차>
1. 비선형 모델인 신경망
2. softmax
- 모델의 출력을 확률로 해석할 수 있게 변환해 주는 연산

3. 활성함수
- 선형모델로 나온 출력물을 비선형 모델로 변형

- 다층 신경망, 순전파(forward propagation)
3. 여러 층을 쓰는 이유
4. 역전파 알고리즘(back propagation)
- 딥러닝은 여러 층의 선형모델과 활성함수에 대한 합성함수이고,
   이 합성함수의 gradient를 계산하기 위해서 연쇄법칙을 적용한 역전파 알고리즘을 사용함

 

(문제) 선형 모델은 단순 데이터를 해석할 때 유용할 뿐 분류문제나 복잡한 패턴을 풀 기는 어려움

(해결) 비선형 모델인 신경망. 그러나 신경망 안에 선형모델이 숨겨져 있고 비선형 모델과 선형 모델이 결합되어있음

 

 

신경망을 수식으로 분해해보자 - 아래는 선형모델

데이터를 모아둔 행렬 XX를 다른 벡터 공간으로 보내주는 가중치 행렬 W의 곱을 통해 선형모델 표현

b는 y절편이고 각 행들이 같은 값을 가짐. 열마다 값은 다를 수도 있음

X* W + B 로 O라는 출력

데이터가 바뀌면 결과값도 바뀌게 됨.

 

출력 벡터의 차원은 d에서 p로 바뀜

화살표는 p*d개가 필요함. 화살표는 Wij를 의미.


신경망 내부에서 사용되는 softmax 

지수함수 사용

 

  • 모델의 출력을 확률로 해석할 수 있게 변환해 주는 연산
  • 분류 문제를 풀 때 선형모델과 softmax 함수를 결합해 예측
  • 특정 벡터가 어떤 클래스에 속할 확률을 계산

def softmax(vec):
    denumerator = np.exp(vec - np.max(vec, axis = -1, keepdims = True))
    #max: overflow 방지
    numerator = np.sum(denumerator, axis = -1, keepdims = True)
    val = denumerator / numerator
    return val
    
vec = np.array([ [1,2,0], [-1,0,1], [-10, 0, 10] ])    
softmax(vec)
'''
array([[2.44728471e-01, 6.65240956e-01, 9.00305732e-02],
       [9.00305732e-02, 2.44728471e-01, 6.65240956e-01],
       [2.06106005e-09, 4.53978686e-05, 9.99954600e-01]])
'''

 

  • one_hot(softmax(o))    ------- X
  • one_hot(o)                   ------- O
  • 그러나 추론을 할 때는 one-hot 벡터로 최대값을 가진 주소만 1을 출력하는 연산을 사용하기 때문에 softmax를 사용하진 않음
  • 학습을 하는 경우에는 softmax 필요

활성함수(activation function)

신경망 구현: 선형 모델을 반복적으로 사용할 때 활성함수는 필수적

 

  • R 위에 정의된 비선형(nonlinear) 함수로서, 활성함수를 사용하지 않으면 딥러닝은 선형모형과 차이가 없음
  • softmax func와의 차이: softmax는 출력물의 모든 값을 고려하는 반면, activation func는 해당 주소에 있는 출력값만 고려함. 따라서 softmax는 vector가 아닌 실수값을 input으로 받음. 그리고 선형모델로 나온 출력물을 비선형 모델로 변형시킴 (변형된 비선형 모델잠재 벡터, hidden vector라고 하고 뉴런이라고 부름. 뉴런으로 이루어진 모델이 바로 신경망 neural network)

 

  • 활성함수 중 sigmoid 함수나 tanh 함수는 전통적으로 많이 쓰였짐나 딥러닝에서는 ReLU 함수를 많이 쓰고 있음

 

 

  • 선형모델에서 활성함수로 한 번 처리한 neural network를 perceptron이라고 함
  • 다층(multi-layer) 퍼셉트론(MLP) (다층 신경망)는 신경망이 여러층 합성된 함수. 딥러닝의 기본적인 모양

활성함수는 각 벡터마다 개별적으로 적용됨

 

  • 순전파(forward propagation): 파라미터를 1부터 L까지 순차적으로 신경망을 계산하는 과정. 학습이 아니라 주어진 입력이 왔을 때 출력물을 내뱉는 연산

여러 층을 쌓는 이유

  • 이론적으로는 2층 신경망으로도 임의의 연속함수를 근사할 수 있습니다.
  • (But) 층이 깊을수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적으로 학습이 가능합니다.
    • 층이 깊으면 적은 파라미터로 더 복잡한 함수를 표현할 수 있습니다.
    • 층이 얇으면 필요한 뉴런의 숫자가 기하급수적으로 늘어나서 넓은 신경망이 생성됩니다.
    • 층이 깊다고 해서 최적화가 더 쉽다고 할 수는 없습니다. (최적화에 더 신경을 많이 써야 합니다.)

역전파 알고리즘(back propagation) 

  • 경사하강법 적용하려면 gradient vector을 알아야함 (선형모델 계수인 베타를 계산해서 parameter 업데이트 했던 것처럼. 다만 선형모델은 한 층이라 한 번에 계산 가능)
  • 딥러닝은 역전파 알고리즘을 이용하여 각 층에 사용된 파라미터를 학습함
  • 각 층 파라미터의 gradient vector윗층부터 역순으로 계산함

 

L은 손실함수. 역전파는 dL/dW(L) 정보를 계산할 때 사용

각 층에 있는 gradient는 빨간 화살표를 통해 밑층으로 전달

 

  • 역전파 알고리즘은 연쇄법칙(chain-rule)기반 자동미분(auto-differentiation)을 사용
    • 연쇄법칙: 합성함수 미분법

  • 각 뉴런(노드)의 텐서 값을 컴퓨터가 기억해야 미분계산이 가능하기 때문에 back propagation 알고리즘의 메모리 사용량이 많음

 

ex) 2층 신경망에서 W(1)에 대해 경사하강법 쓰고 싶다면?

파란색: foward propagation / 빨간: back

손실함수를 출력 o에 대해 미분한 후, h로 미분, z에 대해 미분, w1에 대해 미분한 걸 순차적으로 곱

4번의 연쇄 법칙 

 

각 가중치 행렬에 대한 gradient vector을 확률적 경사하강법을 이용해 mini batch로 번갈아 가며 학습하므로서 주어진 목적식을 최소화하는 parameter 찾음 -> 딥러닝의 학습 원리

  • 분류 문제에서 softmax 함수가 사용되는 이유가 뭘까요?

softmax 함수는 모델의 출력을 확률로 해석할 수 있게 변환해주는 연산입니다.
즉, softmax 함수를 사용한다면, 모델의 결과를 확률로 표현하여 분류 결과와 비교 할 수 있게 됩니다.
따라서, 분류 문제에서 softmax 함수가 사용됩니다.

 

  • softmax 함수의 결과값을 분류 모델의 학습에 어떤식으로 사용할 수 있을까요?

softmax 함수의 결과인 예측값과 정답이라고 할 수 있는 실제값의 오차를 최소화하는 방향으로 학습에 사용 할 수 있습니다.

'전공공부 > 인공지능' 카테고리의 다른 글

Pandas 3편 : Groupby  (0) 2022.07.25
one hot encoding  (0) 2022.07.25
pandas 2편  (0) 2022.07.24
pandas : series, dataframe  (0) 2022.07.23
[jupyter] shift+tab으로 자동완성 안될 때  (0) 2022.07.23