[부스트캠프 AI Tech 5기] Pre-Course : (17) 딥러닝 학습방법 이해하기

araseo·2022년 12월 23일
0
post-thumbnail

📖 신경망을 수식으로 분해해보자

  • 지난 시간까지 데이터를 선형모델로 해석하는 방법을 배웠다면 이제부턴 비선형모델인 신경망(neural network)을 배움
  • 신경망을 수식으로 분해하려면 우선 선형모델을 먼저 이해해야함

  • 각 행벡터 oio_i는 데이터 xix_i와 가중치 행렬 WW 사이의 행렬곱과 절편 bb 벡터의 합으로 표현된다고 가정해보자
  • 데이터가 바뀌면 결과값도 바뀌게 됨
  • 이 때 출력 벡터의 차원은 dd에서 pp로 바뀌게 됨

  • dd개의 변수로 pp개의 선형모델을 만들어서 pp개의 잠재변수를 설명하는 모델을 상상해볼 수 있음

  • 출력 벡터 oo에 softmax 함수를 합성하면 확률벡터가 되므로 특정 클래스 kk에 속할 확률로 해석할 수 있음

  • 신경망은 선형모델과 활성함수(activation function)을 합성한 함수임


  • 다층(multi-layer) 퍼셉트론(MLP)은 신경망이 여러층 합성된 함수임

📖 소프트맥스 연산

  • 소프트맥스(softmax) 함수는 모델의 출력을 확률로 해석할 수 있게 변환해주는 연산임
  • 분류 문제를 풀 때 선형모델과 소프트맥스 함수를 결합하여 예측함

import numpy as np

def softmax(vec):
    denumerator = np.exp(vec - np.max(vec, axis=-1, keepdims=True))
    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]])

import numpy as np

def one_hot(val, dim):
    return [np.eye(dim)[_] for _ in val]

def one_hot_encoding(vec):
    vec_dim = vec.shape[1]
    vec_argmax = np.argmax(vec, axis = -1)
    return one_hot(vec_argmax, vec_dim)

def softmax(vec):
    denumerator = np.exp(vec - np.max(vec, axis=-1, keepdims=True))
    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]])
print(one_hot_encoding(vec))
print(one_hot_encoding(softmax(vec)))
[array([0., 1., 0.]), array([0., 0., 1.]), array([0., 0., 1.])]
[array([0., 1., 0.]), array([0., 0., 1.]), array([0., 0., 1.])]

📖 활성함수가 뭐에요?

  • 활성함수(activation function)은 R위에 정의된 비선형(nonlinear)로서 딥러닝에서 매우 중요한 개념임
  • 활성함수를 쓰지 않으면 딥러닝은 선형 모형과 차이가 없음
  • 시그모이드(sigmoid) 함수나 tanh 함수는 전통적으로 많이 쓰이던 활성함수지만 딥러닝에선 ReLU 함수를 많이 쓰고 있음

📖 왜 층을 여러개를 쌓나요?

  • 이론적으로는 2층 신경망으로도 임의의 연속함수를 근사할 수 있음
    • 이를 universal approximation thorem 이라 부름
  • 그러나 층이 깊을수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적으로 학습이 가능함

📖 딥러닝 학습원리 : 역전파 알고리즘

  • 딥러닝은 역전파(back propagation) 알고리즘을 이용하여 각 층에 사용된 패러미터를 학습함

  • 각 층 패러미터의 그레디언트 벡터는 윗층부터 역순으로 계산하게 됨

📖 역전파 알고리즘 원리 이해하기

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

📖 예제 : 2층 신경망



<이 게시물은 임성빈 교수님의 '딥러닝 학습방법 이해하기' 강의 자료를 참고하여 작성되었습니다.>

본 포스트의 학습 내용은 [부스트캠프 AI Tech 5기] Pre-Course 강의 내용을 바탕으로 작성되었습니다.
부스트캠프 AI Tech 5기 Pre-Course는 일정 기간 동안에만 운영되는 강의이며,
AI 관련 강의를 학습하고자 하시는 분들은 부스트코스 AI 강좌에서 기간 제한 없이 학습하실 수 있습니다.
(https://www.boostcourse.org/)

profile
AI를 공부하고 있는 학생입니다:)

0개의 댓글