AI 엔지니어 기초 다지기 - 3주차 - 딥러닝 학습방법

hyonun·2024년 2월 7일
0

목적 : 신경망을 수식으로 분해해 보자.

지금까지는 선형모델을 사용했지만, 분류나 복잡한 패턴문제를 풀때는 선형문제만으로는 높은 예측을 하기는 어렵다.

-> 신경망 모델을 고려한다. (비선형 모델)

  • 각 행벡터 o, 데이터 x, 가중치 행렬 w, 절편 b벡터의 합으로 표현된다고 가정해보자.
    O = Xw+b
    b - 모든행에대헤 다 똑같은 값을 더해준다고 보자.

출력 벡터의 차원은 d에서 p로 바뀌게 된다. w(d x p) 이기 때문에 (n x p) 행렬로 나온다.

o(n x p)=x (n x d)*w(d x p)+b(n x p)
동작방식 : x라는 행벡터가 주어졌을때 o라는 행벡터로 연결됐을때 p개의 모델을 만들어야 하는데 아래 그림의 화살표의 개수가 w(d x p) 라고 보자. 각각 화살표들의 의미.

softmax 함수 : 모델의 출력을 확률로 해석할 수 있게 변환해 주는 연산 입니다.

o 벡터행렬을 softmax에 집어 넣게 되면 [0.24,0.67,0.09]와 같은 확률 벡터로 변환 할 수 있다.

def softmax(vec):
	denumerator = np.exp(vec - np.max(vec, axis = -1, keepdims = True)) 
    # 오버플로우를 발생하지 않기 위해 max값을 빼준다.
    numerator = np.sum(denumerator, axis = -1, keepdims = True)
    val = denumerator / numerator
    return val

보통 softmax로 확률 벡터로 변환하고 사용한다.

  • 주로 분류 문제를 풀때 선형모델 + 소프트맥스 함수를 결합하여 예측한다.
  • 학습이 아니라 추론의 경우는 굳이 사용 할 필요는 없다.
  • 학습의 경우는 softmax가 필요하다.

주로 분류문제에 softmax를 씌워줘서 선형문제를 풀었는데 선형 모델이아니라 비선형 모델을 활용할때 이런 비선형 트릭을 사용 할 수 있다.

-> 신경망은 선형모델과 활성함수(activation function)을 합성한 함수입니다.

활성함수 : R 위에 정의된 비선형 함수로서 딥러닝에서 매우 중요한 개념

  • 활성함수를 쓰지않으면 딥러닝은 선형 모형과 차이가 없다.
  • 시그모이드 함수나 tanh함수는 전통적으로 많이 쓰이던 활성함수지만 딥러닝에선 ReLU함수를 많이 쓰고 있다.

시그모이드 함수 : 입력을 0과 1사이의 값으로 반환해준다. 주로 이진분류 문제 출력층에서 사용되고, 어떤범주에 속할 확률을 나타낸다.

tanh 함수 : 입력을 -1과 1사이의 값으로 반환한다. 시그모이드와 비슷하지만 출력범위가 더 넓다. 주로 순환 신경망 (RNN)에서 은닉층의 활성화 함수로 사용된다.

ReLU함수 : 양수의 입력값은 그대로 반환하고 음수인 경우는 0으로 반환한다.
전형적인 비선형 함수로 유의하자!

신경망은 선형모델과 활성함수의 결합인것을 잊지 말자.

2레이어 신경망

내 방식으로 쉽게 설명해보자면 ,
저기서 가중치에 해당하는 w(화살표를 나타내는 벡터)를 두개를 써버리면
2층 신경망이라고 부른다.

z = xw +B 라고 하자.

나온 결과값에 또

h = q(z) 와같이 씌워버리고 계속 특정 q행렬을 합성 시킨다..
이렇게 다중적으로 적용한다면 다층 퍼셉트론(MLP) 라고 부른다.
위의 q를 은닉층이라고 부른다.

왜 층을 여러개를 쌓나요?

  • 이론적으로는 2층신경망으로도 임의의 연속함수를 근사할 수 있다.

  • 그러나 층이 깊을수록 목적함수를 근사하는데 필요한 뉴런의 숫자가 훨씬 빨리 줄어들어 좀더 효율적으로 학습이 가능하다.

  • 층이 깊어지면 적은 파라미터로 복잡한 값을 학습 할 수 있다.(그렇다고 최적화가 더 쉽다고는 말할 수 없다.)

  • 층이 얇으면 뉴런의 숫자가 기하급수적으로 늘어나서 넓은 신경망이 되어야한다.

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

딥러닝은 역전파(backpropagation)알고리즘을 활용하여 각층에 사용된 패러미터 {W,b}를 학습한다.

역행렬 처럼 순차적으로 층별로 계산해야한다. 그레디언트 벡터처럼 한번에 역행렬을 곱해버릴 수 없다.

  • 밑의 층에 벡터를 계산할때, 위층의 벡터가 필요하다.
  • 각층의 벡터 파라미터를 계산하고 역순으로 값을 전달하면서 계산을 한다.
  • 합성함수의 미분법인 연쇄법칙을 적용한다.

역전파 알고리즘 미분법 - 연쇄법칙

실제 코드에서는 자동미분을 사용한다.

z = (x+y)**2 
z = w**2 
w = x+y

여기서 미분값을 넣어주고 위 식에서

dz/dw = 2w

dw/dx = 1

임을 알 수 있다. 그래서 위 값들을 넣으면

dz/dx = 2w * 1 = 2(x+y) 가 된다.

즉, 연쇄적으로 미분을 하기위해

이런식으로 연쇄적으로 미분을 넣어준다는 말이다.
backword propagation - 이전값의 미분값 저장필요
forword propagation - 저장 필요 없음

2층 신경망 역전파 알고리즘 예시

딥러닝의 수식적인 구성을 살펴봤다.
딥러닝은 합성함수들의 여러 결합이다.

profile
비전공자 + 타업계 경력2년의 IT 개발자 도전기~

0개의 댓글