딥러닝 학습방법

suhan cho·2023년 1월 2일
0

신경망을 수식으로 분해

  • 기존의 선형모델로는 복잡한 문제를 해결하기 힘들다
  • 비선형모델인 신경망(neural network)

  • 가중치 행렬 w가 있다(기존 행렬를 다른 행렬로 보내 줄 수 있다)
  • x가 w와 b의 선형결합으로 o가 만들어진다

  • 분류문제를 풀 때 학습을 시키기 위해서는 softmax가 필요

Softmax

  • 모델의 출력을 확률로 해석할 수 있게 변환해주는 연산
  • 분류 문제를 풀 때 선형모델과 소프트맥스 함수를 결합하여 예측
def softmax(vec):
	#지수함수를 사용하면 너무 큰 벡터가 들어오면 오버플로우가 발생할 수 있다. 그러므로 np.max를 뺀다
	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)

# Ex [1,2,0] -> [0.24, 0.67, 0.09]
  • O 출력벡터를 softmax 함수를 합성하면 확률벡터가 되므로 특정 클래스 k에 속할 확률로 해석가능

  • 추론 시 원핫 벡터로 최대값을 가진 주소만 1로 출력하는 연산을 사용해서 softmax를 사용하지 않는다.

신경망

  • 분류모델일 경우 소프트멕스를 이용해서 선형모델에 나온 출력값에 소프트멕스를 사용
    • 소프트멕스를 사용하면 원하는 결과값을 얻을 수 있다.
  • 신경망은 선형모델과 활성함수를 합성한 함수이다. <-소프트맥스처럼
    • SoftMax는 모든 출력물을 고려해서 한다
    • 활성화함수는 해당 주소의 결과값으로만 한다 -> 나온 결과값을 잠재벡터

활성함수

  • 실수 값을 입력을 받아서 실수 값을 출력한다
  • R위에 정의된 비선형 함수이다
  • 활성함수를 쓰지 않으면 딥러닝은 선형모형과 차이가 없다.
  • sigmoid함수나 tanh함수는 전통적으로 많이 쓰이던 활성함수지만 딥러닝에선 ReLU 함수를 많이 쓰고 있다.

  • 신경망은 선형모델과 활성함수를 합성한 함수이다.

다층 퍼셉트론

  • 신경망이 여러층 합성된 함수
  • x를 입력으로 받고 w1가중치를 받아 z로 보내고 z를 활성화함수를 씌워서 H라는 잠재벡터에 보낸다
  • 활성화함수는 각 벡터에 개별적으로 적용
    -> 순차적인 신경망 계산을 foward propagation이라고 부른다

층을 여러개 쌓는 이유

  • 층이 깊을 수록 목적함수를 근사하는데 필요한 뉴런(노드)의 숫자가 훨씬 빨리 줄어들어 좀 더 효율적으로 학습이 가능 (적은 노드로 복잡한 패턴을 만들 수 있다)

역전파

  • 선형은 한번에 경사하강법을 하면 되지만 딥러닝은 각 층대로 수행한다.
  • 위층에 있는 gradient를 계산하고 밑에 층에 전달하면서 가중치 업데이트

  • 연쇄법칙 기반 자동미분을 사용
  • 각 뉴런에 속하는 값을 텐서라고 한다
  • 역전파를 하기 위해서는 각 텐서의 미분값를 미리 알고 있어야 하므로 순전파에 비해 메모리가 크다
profile
안녕하세요

0개의 댓글