본문 바로가기

Machine Learning

Additional Neural Network Concepts&Back Propagation

Coursera의 Machine Learning Specialization강의를 정리한 내용입니다

Adam Algorithm

지금까진 최적화를 위해 gradient descent를 사용했었다.

하지만, cost function을 최소화하는데 사용할 수 있는 다른 최적화 알고리즘도 존재한다.

gradient descent의 update식과 contour plot을 통해 우리는 cost function J를 plotting 했었다.

왼쪽 사진

모든 step이 거의 같은 방향으로 진행될 때, $\alpha$가 작다면 minimize하는 데 속도가 매우 느리다. learning rate가 너무 낮아서 비슷한 방향으로 아주 작은 단계만 반복하는 경우 learning rate의 값을 더 크게 만들어야한다. 이를 해결하기 위해 $\alpha$를 자동으로 높일 수 있는 알고리즘이 존재하며, 이것이 Adam algorithm이다.

오른쪽 사진

왼쪽 사진과 대조적으로, learning rate가 비교적 높은 경우, 오른쪽과 같이 진동하는 형태로 update가 될 수 있다.

이경우에는 learning rate를 낮추면 되며, Learning rate가 낮을 수록 cost function의 최솟값을 향해 더 순조롭게 이동할 수 있다.

Adam algorithm은 이 작업 또한 자동으로 수행할 수 있다.

Adam algorithm은 하나의 learning rate값만 사용하는 것이 아니라 model의 parameter에 대해 서로 다른 learning rate를 적용시킨다. 즉, $w_1$~$w_{10}$,$b$까지의 파라미터가 있으면, learning rate $\alpha$또한 11개가 있는 것이다.

Adam algorithm은 $w_j$,$b$가 같은 방향으로 움직이는 것 같으면 $a_j$의 값을 증가시키고, $w_j$,$b$가 앞 뒤로 진동하는 것 같다면 $a_j$를 줄인다.

코드상으로는 위와 같이 구성된다. 위의 예제에서는 초깃값을 0.001로 설정했지만, Adam 알고리즘을 실제로 사용할 때에는 다양한 learning rate를 사용해 보는 것이 좋다.

Adam algorithm은 gradient descent와 비교하면 learning rate를 자동으로 조정할 수 있기 때문에 더 정확한 learning rate의 selection에 도움이 되며, 훨씬 더 빠르게 작동할 수 있다는 장점이 있다.

실제로 오늘날 대부분의 실무자들은 gradient descent보다 Adam을 많이 사용한다.

Additional Layer Types

Convolutional Layer

지금까지 살펴본 모든 layer는 dense layer였다.

dense layer에서 각 layer는 이전 layer의 모든 activation outputs에 대한 함수였다.

 

Layer에는 다른 종류도 존재하는데, 그 중 하나로 Convolutional Layer를 들 수 있다.

왼쪽에 보이는 것은 입력값 X(손글씨 9)이다. 파란색 뉴런은 input 전체를 보는 것이 아니라, 파란색 직사각형 영역의 pixel만 볼 수 있다고 말할 수 있다.

이처럼, 여러 뉴런이 해당하는 영역만 볼 수 있게 함으로써 1. 계산속도를 높이고, 2. training data가 덜 필요하며, 3.과적합 가능성이 줄어들 수 있도록 할 수 있다. 학습 알고리즘의 사용에서, 각 neuron이 input image의 특정 영역만을 바라보는 이러한 유형의 게층을 Convolutional layer라고 한다.

신경망에 Convolutional Layer가 여러개 있는 경우, 이를 Convolutional Neural Network(CNN)이라고 부른다.

Convolutional Neural Network

CNN에 대해서 더 자세하게 알아보자.

해당 예제에서는 2차원 이미지 대신 1차원 이미지를 사용할 것이고, EKG 신호(심장 질환 진단시 사용하는 신호)의 예를 살펴볼 것이다.

먼저, EKG 신호를 100개의 서로 다른 시점에서 이 곡선의 높이에 해당하는 숫자가 100개라고 말 할 수 있다.

Convolutional Neural Network가 할 수 있는 일은 위와 같다.

먼저, EKG 신호를 90도 회전시켜 옆으로 눕혀보자.

처음의 hidden layer의 unit을 만들 때 첫번째 unit에 100개의 숫자를 모두 입력하는 대신 $x_1-x_{20}$까지의 input을 받고 있으며, 다른 unit들도 마찬가지로 영역을 지정해서 input을 받는다.(Window를 지정하는 것과 같다)

이것은 Convolutional Layer이며, 이는 EKG 신호를 나타내는 여러 Window처럼 보인다. 

 

다음 layer 또한 Convolutional Layer가 될 수 있으며, 모든 activation value를 살펴보는 것이 아니라 이전 layer의 처음 5개의 activation만 input으로 받고, 나머지 unit에는 다른 activation을 얻을 수 있다.

 

마지막으로 $\vec a^{[2]}$는 심장 질환의 유무를 구별하기 위해 binary classification을 수행하며, sigmoid activation function을 사용한다.

 

이것이 CNN의 예이다. Convolutional Layer를 사용하면 single neuron이 살펴보아야하는 input window의 크기, layer에 포함되어야하는 layer의 수 등 다양한 아키텍처를 선택할 수 있다. 이렇게 Convolutional layer를 사용함으로써 dense layer보다 더 효과적인 새로운 neural network를 구축할 수도 있다.

CNN외에도 Transformer, Attention 같은 또다른 아키텍처가 존재한다.