Q. 왜 단층 Perceptron 모델에서 Layer를 추가하게 되었나요? 

Q. Universal Approximation Theorem은 뭔가요? 



2~4장까지 배웠던 부분을 아래와 같이 하나의 그림으로 요약을 할 수 있습니다. 

1.입력값들이 가중치를 곱합니다(=aj) 결과가 aj로 표현되고 

2. aj는 activation function 'f'를 통과하고 자신들이 예측한 값 yj을 도출합니다.

3. 실제 정답 값 tj의 오차값을 (문제정의에) 알맞은 cost function을 통해 도출(=ej=(tj-yj)^2/2)합니다.

4. 오차값(ej)을 기반으로 backprogation을 통해 가중치 w를 업데이트 함으로써 학습진행하게 됩니다.


<사진1>



이러한 Perceptron은 많은 문제를 해결해 줄 것으로 기대했어요. 예를들어 두 개의 입력값 x1, x2 ∈ {0,1} 중 하나만 1이라는 입력이 들어오면 1이라는 결과를 도출하는 OR 문제같은 경우나, 두 개의 입력값이 모두 1이어야만 1이라는 결과를 도출하는 AND 문제와 같은 경우는 쉽게 해결이 가능했어요.


x1을 X로, x2를 Y라고 하고 Y를 C라는 임의의 상수라고 표현하면 activation function을 거치기 직전인 w1X+w2Y=C 라는 식이 만들어 지겠네요. 그런데 왼쪽 식을 Y=(-w1X+C)w2 라고 바꿔주면 직선의 방정식 (linear) 이 되는 것을 볼 수 있죠?


충분히 두 개의 입력으로 구성된 perceptron으로 문제 해결이 가능해졌어요.

 

  

 

<사진2>




하지만 XOR 문제를 푼다라고 가정해봅시다. 두 개의 독립변수 x1, x2 ∈ {0,1} 가 입력으로 받아들여지고 이 두 개의 입력중 오직 하나의 입력만이 1인 경우에만 1이라는 결과를 출력할 수 있는 문제입니다. 이를 간단히 표현하면 아래와 같이 표현할 수 있겠네요. 


 그런데 우리가 정의한 문제공간(Original x space = 사진2 '가운데 그림')은 직선으로는 구분하게 힘들어 보여요. 물론 w1x1+w2x2=c 라는 식이 non-linear한 성격인 activation function을 거치면 어떤 곡선을 나타내는 식이 만들어져 XOR 문제를 해결할 수 있겠지만 현재 우리가 알고 있는 activation function으로는 힘들다고 해요. (제 생각으로는 activation function이 직선형태(linear)라고 할 수는 없지만, ReLU, Leaky ReLU 와 같은 함수들은 영역에 따라 상당히 linear(직선)한 성격을 갖고 있어요. 그래서 아래와 같은 문제를 해결할 수 없는거 같아요)


<사진2>


이렇게 간단한 문제조차도 해결하지 못했기 때문에, 신경망 연구는 더이상 지속되기 힘들다고 했지만 단순히 Layer를 추가 함으로써 위와 같은 문제를 쉽게 해결할 수 있게 되었어요. 


우선 기존의 perceptron 모델은 input layer 하나만 있었다면, 우리는 hidden layer라는 층을 추가해서 layer를 2개 이상으로 만들거에요 (=Multi-Layer Perceptron). 그리고 W, w, c는 이미 학습을 완료했다고 가정하고 그림으로 요약하면 아래와 같아요.


<사진3>



처음에 "WX+c --> activation function"과정은 perceptron에서도 봤던 과정이에요. 그런데, 이렇게 한번 거치고 나면 "Original x space->Learned h space"로 문제공간이 변경된 것을 볼 수 있을거에요. 이렇게 변형된 "Learned h space"를 보면 직선(linear)하게 문제를 해결할 수 있게됩니다.


<사진4>


위와같이 문제공간을 변형시키는 트릭을 Kernel trick이라고도 부르는데요. 보통은 문제공간의 차원을 변형시켜서 푸는 방법을 의미합니다. 알아두시면 좋아요!

<사진5. Kernel trick>


Hidden layer를 하나 추가함으로써 non-linear한 문제를 아래와 같이 풀 수 있게 되었어요!


<사진6>



결과적으로 이야기하자면 layer를 하나 더 추가(hidden layer)함으로써 non-linear problem을 linear problem으로 변경해주게 되는데요. 이렇게 layer를 추가해준다는 개념은 linear한 성격만 지닌 perceptron에 non-linear한 성격을 마구 부과해주는 역할로 이해될 수 있어요. (아래의 그림을 보면 더욱 직관적으로 이해하실거에요!)



       

<사진7>



이전장에서 activation function에 대한 큰 의미가 non-linear한 성격을 지니는 것이라고 언급한바 있죠? 이제는 이해가 되시나요? activation function이 없다면 아무리 layer를 추가한들 "f(x)=ax+b,  h(x)=cx à y(x)=h(h(h(x)))=c×c×c×x=(c^3)x --> a=c^3 or "a and c are constant" 라고 한다면 결국 같은 linear 한 성격만 갖게 됩니다. 즉, 아무리 hidden layer를 추가한들, activation function이 없다면 MLP 또한 linear한 문제밖에 풀지 못할거에요! (예를들어 위에 사진5 수식에서 ReLU안에 인자들이 ReLU를 거치지 않고 모두 더해진다고 생각해보세요. 결국 또 직선의 방정식이 나올거에요!)


지금까지 설명한 것을 요약하자면, "activation function을 포함한 다수의 layer를 갖고 있는 MLP는 non-linear한 문제를 풀 수 있다"정도가 되겠습니다. 그리고, 이러한 설명을 하나의 이론으로 설명하고 있는것이 있는데 그것이 바로 'Universal approximation theorem'입니다.


아래글은 위키백과에 나온 universal approximation theorem을 인용한 것 입니다. 



"In the mathematical theory of artificial neural networks, the universal approximation theorem states[1] that a feed-forward network with a single hidden layer containing a finite number of neurons can approximate continuous functions on compact subsets of Rn, under mild assumptions on the activation function. The theorem thus states that simple neural networks can represent a wide variety of interesting functions when given appropriate parameters."


"activation function영향 아래에서 추가된 hidden layer는 연속함수를 근사화할 수 있고, 이에 따라 적절한 가중치가 주어진다면, 다양한 함수들(with non-linear function)을 표현할 수 있다"



그럼 지금부터 요약을 해볼께요. 우선 지금까지 배운 MLP를 아래와 같은 그림으로 나타낼 수 있겠어요!


<사진8>



<사진9>



앞에선 하나의 hidden layer만 추가했지만, layer가 더 깊이 쌓여지면 쌓여질수록 deep한 neural network(신경망)이 많들어질거에요. 그리고 우리는 이를 deep neural network (DNN)이라고 부르고, 오늘날 딥러닝이라는 학문의 핵심적인 모델이됩니다.


<사진10>


현재 딥러닝에서 언급하고 있는 Artificial Neural Network (ANN)은 Multi-Layer Perceptron (MLP) 또는 Deep Neural Network (DNN)이라는 용어와 동일하게 사용되고 있어요. 


그런데, 무조건 layer를 추가한다고 좋을까요? 계속 추가하게 되면 가중치도 많아지고 뭔가 복잡해질것같지 않나요? 시스템이 복잡해지면 학습이 잘 될까요? 


위와같은 질문때문에 DNN에서 어떻게 하면 학습을 더 잘시킬 수 있을지에 대해 많은 방법론이 나오고 있어요. 그리고 다음장에서는 이러한 방법론중 가장 대표적인 '정규화(Regularization)'에 대해서 알아보도록 할거에요! 




#Multi-Layer Perceptron    #Universal Theorem   #Activation function   #Non-linearity   #Kernel Trick


[사진 래퍼런스]

사진1

https://blog.yani.io/backpropagation/

사진2

http://www.birc.co.kr/2018/01/22/xor-%EB%AC%B8%EC%A0%9C%EC%99%80-neural-network/

https://poddeeplearning.readthedocs.io/ko/latest/%EB%B0%91%EB%B0%94%EB%8B%A5%EB%B6%80%ED%84%B0%20%EC%8B%9C%EC%9E%91%ED%95%98%EB%8A%94%20%EB%94%A5%EB%9F%AC%EB%8B%9D/2.Perceptron/

사진5

http://solarisailab.com/archives/2552

사진6

https://towardsdatascience.com/the-magic-behind-the-perceptron-network-eaa461088367

사진7

https://towardsdatascience.com/can-neural-networks-really-learn-any-function-65e106617fc6

사진8

딥러닝 제대로 시작하기

사진9

https://bbangko.tistory.com/5

사진10

http://neuralnetworksanddeeplearning.com/chap6.html



Q. Activation function은 왜 쓰이는건가요? 

Q. Activation function은 왜 이렇게 종류가 다양한건가요?


앞서 Neural Network에 대해서 배워보았습니다. 다시 Neural Network를 살펴볼까요? 아래그림중에 f라고 표시된 activation function이 담당하고 있는 역할이 뭘까요?


<사진1>



본래 뉴런은 여러 경로를 통해 들어온 전기신호의 합이 일정치 이상이 되면 다음 뉴런으로 신호를 전달하게 됩니다. 앞서 언급한 "일정치 이상이 되는 기준"이 Activation function이 되는 것입니다. 예를 들어, 일정 값 이상이 되면 1을 출력하여 다음 뉴런에 값을 전달해 주고, 일정 값 이하가 되면 0을 출력하여 다음 뉴런에 값을 전달해주지 않게 합니다.


사실 굳이 출력 값을 activation function을 통해 0 or 1 값으로 범위를 한정하는 것이 얼마나 큰 의미를 갖고 있는지는 모르겠습니다. 그냥 가중치에 입력값을 곱한 것을 그대로 다음 신경망에 넘겨줘도 되지 않을까요? (물론 값이 굉장히 커지거나 굉장히 작아지는 것 이외에도 우리가 모르는 문제가 생기긴 하겠습니다만 명확하게 그렇게 하면 안되는 이유를 찾긴 힘들어보입니다)


하지만 분명한 사실은 non-linear한 성격을 가진 activation function의 역할이 Multi-Layer Perceptron (MLP)에서 두드러지게 되는데요. 결론부터 이야기하지면 Deep Neural Network에서 layer가 깊어질수록 Wx라는 linear function만으로는 non-linear한 모델을 표현할 수 없기 때문에 문제가 발생하게 됩니다(이 부분은 이해가 안되는게 당연해요! 자세한 내용은 5장 Multi-Layer Perceptron에서 설명하겠습니다)


그래서 Activation function의 존재이유를 5장으로 미루고 이번장에서는 간단히 activation function의 변천과정을 살펴보도록 할께요!



1)Step function


초기에는 뉴런의 특성을 그대로 적용하여 step function을 activation function으로 삼았습니다. 단지 다음 뉴런으로 전기신호를 보내줄지 말지를 결정하는 모델을 본따서 만든 것 같습니다. 그런데, step function이 가지는 가장 큰 단점은 미분이 불가능 하기 때문에 backpropagation을 통한 학습이 불가능해진다는 것 입니다. (Backpropagation 설명은 아래 사이트를 참고해주세요! 아니면 "밑바닥부터 시작하는 딥러닝"이라는 책의 backpropagation 부분을 참고하셔도 됩니다! 좀 더 압축된 내용은 제가 따로 정리한 pdf파일을 올려놓을께요. 그런데 글씨가.. ㅜㅜ)

6. Backpropagation (2).pdf

https://kolikim.tistory.com/46


(아니면 backpropgation관련 아래 영상을 참고하셔도 되요!)




<사진2>




2) Sigmoid function


Backpropagation을 통한 학습이 가능하게 하기 위해서, 미분이 불가능한 step function을 sigmoid function 으로 대체하게 됩니다. 함수가 연속성을 갖고 있기 때문에 모든 구간에서 미분이 가능하게 되죠! 


<사진3>



하지만 sigmoid function에도 문제가 생기게 되는데요. Backpropagation으로 가중치가 업데이트되는 원리를 알고 계신다면 sigmoid function의 치명적인 단점을 볼 수 있게 됩니다. 예를 들어, sigmoid function은 0~1 사이의 값을 도출하게 되는데 sigmoid 그래프를 보면 알 수 있듯이 입력 값들이 점점 위의 그래프 가운데서 멀어지게 되면 미분시 굉장히 작은 값을 도출하게 됩니다.


제가 업로드한 PDF파일을 보시면 알겠지만, backprogation으로 학습하는 방식은 chain rule을 이용하게 되는데, 만약 Wx 값이 아주 크게나오거나 아주 작게 나오게 되는 경우 제일 마지막에 연결된 뉴런에 해당하는 가중치 업데이트가 아래와 같이 이루어지게 됩니다. 


∇W = 0.1x0.4x.0.3x.0.60=0.0072


결과적으로, 제일 뒤에 연결된 뉴런들은 가중치 업데이트를 못하는 상황이 발생하게 되는데요. 이를 Vanishing Gradient 문제라고 합니다. 



<사진4>




 

3) ReLU (Rectifier Liner Unit = ramp function)


Vanishing Gradient 문제를 해결하기 위해서는 어떻게 하면 좋을까요? 시그모이드 함수에서 미분값이 문제가 되었으니 이를 해결해주면 되지 않을까요?


이러한 문제를 해결해주고자 ReLU라는 activation function이 나오게 됩니다. 



위의 수식을 보시면 알겠지만 Activation function을 통해 나온 값을 굳이 0~1 사이로 제한하지 않았네요! 


<사진5>





0이상이면 미분이 항상 일정한 기울기 값이 나오기 때문에, Backpropagation을 통해 학습을 하더라도 맨 뒤에 있는 뉴런까지 학습이 잘 되겠네요! (결과론적이지만 아래 cost function이 최저로 수렴하는 속도를 보더라도 ReLU가 학습이 빠른시간내에 된다는것을 알 수 있습니다!)


<사진6>



그런데 한가지 의아한 부분이 있습니다. x<0 인경우에 그냥 미분값이 0으로 설정되게 했는데, 그렇다면 Wx 값이 0이하에 관련된 weight parameter들은 backpropagation을 통해 업데이트가 이루지지 않게 됩니다. Wx 값이 음수가 나오더라도 음수값이 지니는 의미가 있을테니 이를 잘 활용하여 가중치들을 업데이트 시키면 좋지 않을까요?



4) 기타 사용되는 activation function


위에서 던진 질문을 해결하고자 나온 activation function들은 아래와 같습니다.




제시된 activation function을 보면 모두 음수값을 어떻게든 활용하려는게 보이시죠?


<사진7>



2015년에 나온 논문에는 ELU(Exponential Linear Unit) activation function을 사용했다고 하네요?



<사진8>


다양한 activation function이 나오고 있지만 결과적으로 ReLU와 큰 차이를 보이진 않는다고 해요. Activation function은 x<0 이하의 값들을 어떻게 출력해줄지, 또는 현재 x>=0 인 경우를 어떻게 출력해줄지에 따라서 굉장히 다양한 조합으로 activation function을 만들어 줄 수 있어요 (물론 현재는 x>=0인 경우는 그대로 x를 출력해주는게 보편화 되었지만요).


"하지만 개인적인 생각으로는 가중치의 초기값을 어떻게 설정해주는지에 따라, 또는 초기 가중치 값에 따른 Wx 값들이 어떤 분포를 이루는지 따라서 어떤 activation function을 사용하면 좋을지를 판단하는게 좋을 것 같아요. 물론 이 부분에 있어서 많은 경험적or이론적 연구가 많이 진행되어야겠지만요"


5) Softmax activation function


마지막으로 알아볼 것은 softmax activation function이에요. Softmax는 아래와 같은 수식을 나타내요. 결론적으로 말하자면 Softmax는 최종적인 결과를 확률로 알아보기 위해 사용되요. 우선 아래그림을 살펴볼께요.


아래수식이 그림에 표현된 softmax라는 영역에 다 적용이되요. 아직 Deep Neural Network에 대해서 설명한건 아니지만, Neural Network를 아래와 같이 구성할 수 있어요. 만약 아래와 같이 입력뉴런이 다음 뉴런들에 연결이 되고, 그 연결된 뉴런에서 결과값 z를 얻는다고 해볼께요. 임의로 설정된 z는 k개이고, 이 k라는 인자가 softmax에서 중요한 역할을 해요. 우리는 z라는 뉴런들의 결과들을 확률로써 이해하고 싶다고 해볼께요. 그렇다면 z1~zk의 합은 1이되어야 겠죠? 그리고 z1와 z2의 값이 상대적으로 큰 경우 확률로 변환되었을 때에도 상대적인 차이가 유지되어야겠죠? 

<사진9>


위에있는 설명을 사진하나로 요약하면 아래와 같습니다. 이젠 Softmax가 어떤목적으로 사용되는지 아시겠죠? 다음장에서 Deep Neural Network를 보시면 더 잘 이해가 되시겠지만 Softmax는 마지막 layer가 되는 부분에서 확률적인 결과값을 얻기 위해종종 사용됩니다. (ReLU, Sigmoid 처럼 매번 쓰이는것과는 다르게 마지막 layer에서 한번 사용되는게 일반적이에요~)


<사진10>





지금까지 Activation function을 살펴봤습니다. 사실 이번장에서는 Activation function이 가지는 큰 의미에 대해서 깊게 살펴보지는 못했어요. 하지만 다음장 Multi-Layer Perceptron (MLP)에서 activation function이 지니는 유용성을 알아볼꺼에요 (힌트는 non-linearity 에요!). 




#Activation function    #Step function   #Sigmoid function   #ReLU    #Leaky ReLU     #PReLU    #ELU

#Non-Linearity   #SoftMax function




[사진래퍼런스]

사진4

http://blog.naver.com/PostView.nhn?blogId=ehdrndd&logNo=221406005034&parentCategoryNo=&categoryNo=45&viewDate=&isShowPopularPosts=false&from=postView

사진5

https://en.wikipedia.org/wiki/Rectifier_(neural_networks)

사진6

https://pythonkim.tistory.com/40

사진7

https://seongkyun.github.io/study/2019/05/01/activations/

사진8

https://ml-cheatsheet.readthedocs.io/en/latest/activation_functions.html

사진9

http://rinterested.github.io/statistics/softmax.html

앞선 2장에서는 MSE(Mean Square Error)를 cost function으로 사용했습니다. 그런데, 모든 딥러닝에서 Cost function이 MSE로 통일되는건 아니에요. 그래서 이번장에서는 또 다른 cost function에 대해서 알아보려고 해요.



<1. 이진분류에 사용되는 Cost function; Logistic cost function>



상품을 품질 테스트 할때, 테스트의 합격 여부를 구분하려는 문제가 있다고 해볼께요. 어떤 입력 X가 들어왔을 때, d=0 을 '불합격', d=1 을 '합격'이라고 한다면 아래와 같이 표현할 수 있게 됩니다. 




1번은 상품의 품질에 영향을 미칠 수 있는 변수들 (ex: x11=색이변한정도, x12=내구성 ...)에 대한 정보를 담고 있습니다. 그리고, 3번 처럼 각 변수들이 가지고 있는 값들이 합격(d=1)인지, 불합격(d=0)인지에 대한 정보를 갖고 있습니다. 1~3번에 대한 정보를 갖고 신경망(가중치)을 학습시킵니다. 우리의 목표는 4번처럼 우리가 갖고 있지 않은 미지의 입력값 x가 들어오더라도 최적화된 가중치 w를 통해 상품이 합격인지 불합격인지 구분해 낼 수 있는 신경망을 얻는 것입니다.




앞에서 간단한 흐름을 언급했으니 이제부터 이진분류에 대한 문제정의를 해볼거에요.



입력값 x가 들어왔을 때, d=1일 확률(=조건부확률)을 수식으로 써보면 아래와 같습니다.



앞서 설명한 neural network의 perceptron(neural network) 모델 기반으로 설명하자면 아래와 같습니다.


① 상품 품질에 영향을 미칠만한 변수들 x11, x12, ... 등을 입력으로 받는다.

② 입력값에 가중치 값을 곱해준다.

③ Activation function을 거친 결과가 50%(0.5) 이상이면 1이라는 값을 출력하여 합격이라는 결과를 주고, 50% 이하면 0이라는 값을 출력하여 불합격이라는 결과를 주게 된다. (Activation function에 대한 자세한 설명은 바로 다음장에서 이어지니 우선은 이런 과정이 있구나 정도로 이해해주시면 될거같아요!)


<사진1>


지금까지 설명한 내용을 수식으로 정리하면 아래와 같습니다. "x를 입력으로 받았을 때, w값이 곱해진 결과가 d=1 or d=0일 확률"이라는 문장을 아래 수식하나로 표현할 수 있게 됐네요. (아래의 확률값이 activation function을 거쳐 최종 output 값(0 or 1)을 갖게 됩니다)



다시 종합해서 정리해 보겠습니다. 우리에게는 상품품질에 영향을 미치는 변수정보 x1={x11, x12, ...} 가 있고, 그 상품이 합격인지 불합격인지에 대한 정보도 가지고 있습니다. 이미 우리가 갖고있는 입력값에 대한 합격 또는 불합격 정보를 통해 최적의 가중치 값 w를 찾을 예정입니다.


그런데, 최적의 가중치 값 w를 어떻게 찾는지 궁금하지 않으신가요? 이를 이해하기 위해서는 최대우도법(maximum likelihood estimation)이라는 개념을 알아둘 필요가 있습니다. 


먼저 아래 영상을 통해 maximum likelihood estimation에 대한 의미를 알아보도록 할께요.


위의 강의에서 log가 쓰인 이유를 간단히 정리하자면 아래와 같습니다.

log함수는 concave(오목)이기 때문에, 미분 시 maximum 값을 고를 수 있게 된다.

log 함수는 미분이 쉽다.

log 함수는 곱하기 부분을 덧셈으로 나눌 수 있기 때문에, 전체 식을 미분하기 쉽다.



그리고 두번째로 기하적인 관점에서 Maximum likelihood estimation이 어떻게 동작하는지 살펴볼께요. (영어설명이긴 한데, 자막과 같이 보면 이해하는데 크게 어렵진 않으실거에요!)


강의는 잘 보셨나요? 그렇다면 제가 다시 정리해서 설명드려 볼께요.

먼저 아래 그림을 살펴볼께요.

<사진2>


우리에게는 X라는 입력데이터가 있습니다. 위의 사진에서 보면 X축에 있는 빨간점들이 되겠네요. 위의 확률분포는 Normal distribution 입니다. 가운데에 있는 입력변수들은 합격과 관련된 입력변수들입니다. 그런데, 위에 있는 Normal distribution 위치는 조금 이상하죠? 합격으로 부터 멀리떨어진 불합격과 관련된 입력변수의 확률값이 굉장히 높게 나오네요. 왜 이렇게 나온건지 지금부터 천천히 살펴 보겠습니다.



우리가 세운 모델(=위의 수식)에서는 X입력값 말고도 확률값에 영향을 미치는것이 있었습니다. 그것이 w(가중치)입니다. 


다시 사진2를 보게 되면 초기에는 가중치값이 랜덤하게 설정되어 있다보니, 합격이 아닌 입력데이터X가 들어오더라도 최적화되지 않은 가중치 w의 영향으로 합격일 확률이 굉장히 높게 나왔어요. 


하지만, 가중치들이 학습을 거치게되면 아래와 같이 입력데이터들에 따른 합격, 불합격 정보를 잘 나타나게 해줍니다. 



       

<사진3>                                                                                          <사진4>



이제는 MLE(최대우도추정법)에 대한 정의를 이해하실 수 있으실 겁니다.


"우도(likelihood = L(Θ;w|x) 란 이미 주어진 표본데이터(X)들에 비추어 봤을 때 모집단의 parameter인 가중치(w)에 대한 추정이 그럴듯한 정도를 가리키며, 미지의 가중치(=parameter)값인 확률분포에서 뽑은 X값들을 바탕으로 우도를 가장 크게 해주는 추정방식을 Maximum Likelihood Estimation 이라고 한다" 

 


자! 그렇다면 이제 수식을 살펴볼까요?


우리는 처음에 이진분류의 문제정의를 아래와 같이 만들었습니다.



그렇다면 위의 수식모델을 기반으로 입력데이터 X에 영향을 미치는 w에 대한 우도(Likelihood)를 아래처럼 구할 수 있게 됩니다. (첫번째 영상강의를 보시면 아래 수식의 의미를 정확히 이해하실수 있으실거에요!)




마지막으로 첫 번째 강의에서 언급해주신 대로 위의 수식을 log화 해주면 아래와 같은 수식이 완성되고, 우리의 최종 오차함수가 됩니다. (식 앞에 마이너스를 해준 이유는 신경망의 cost 함수에서는 미분시 최소값을 찾아야 하기 때문이에요!)






지금까지 이진분류에 따른 오차함수를 설정하는 방법에 대해서 알아보았어요.


오차함수를 정하는 방법을 아래처럼 요약할 수 있겠네요!

1. 문제정의에 따라 신경망이 출력하는 예상값과 실제 정답지에 대한 오차를 어떻게 설정할지 결정한다.

2. 오차함수를 결정할 때에는 미분이 쉽게 되는지, 기하적으로 미분시에 cost(오차)값을 최소한으로 만들어 줄 수 있는지를 살펴보아야 합니다.




<2. 다 클래스 분류에 사용되는 Cost function; Cross Entropy function>


다음장에서는 이진클래스 분류가 아닌 여러 클래스 분류에 대해서 알아보도록 할거에요. 핵심적인 설명은 이진분류에서 설명을 다했기 때문에 여기서는 수식만 설명을 하겠습니다.


이진 분류의 수식을 이해했으면 다 클래스에 대한 수식도 금방 이해할 수 있어요. 몇 가지 다른 점들만 설명할께요!


1. 분류하려고 하는 클래스를 아래와 같이 정의 한다.


2. 앞선 이진분류에서 언급한 (x,d) training data들에서 d의 표현식을 아래와 같이 정의한다. (dn의 각 성분은 대응하는 클래스가 정답 클래스일 때 1이 된다) 예를 들어, 우리가 0~9 숫자를 분류한다고 했을때, 우리가 갖고 있는 이미지 데이터 x가 2라고 하면 d는 d=[0 1 0 0 0 0 0 0 0 0] 가 됩니다.



그럼 이진분류의 기본개념을 생각해보면 다 클래스 분류의 cost function을 만들어 볼까요?


1. 먼저 사후확률 분포를 만들어 줍니다 ('사후확률분포'라는 용어 대해 깊게 생각 하실 필요는 없습니다!)


2. 위의 표기식에 우도를 구하면 아래와 같다


3. 위의 우도식을 log 취하여 부호를 반전한 것을 오차함수로 삼고, 이 함수를 cross entropy(or negative log likelihood)라고 한다.


사실 cross entropy라는 개념은 정보이론에서 KL divergence와 연계되서 설명이 많이 되는 개념이에요. 정보이론에서 사용되는 cross entropy 개념은 여기를 참고해주세요!




지금까지 딥러닝에서 쓰이는 대표적인 오차함수들에 대해서 알아보았습니다.


실제로는 딥러닝에서 쓰이는 cost function 종류가 많지는 않다고 해요. 하지만, 오차함수라는 개념이 왜 나왔는지에 대한 맥을 잡고 있다면, 자신이 새로이 문제정의를 하고 새로운 cost function을 만들어 좀 더 딥러닝 모델의 효율을 높일 수 있겠죠??







혹시, 글 초반부분에 Activation function에 대해서 언급하고 추후에 설명하겠다고 했던말 기억하시나요? 다음 장에서 Activation function에 대해 설명할 예정이니 많이 기대해주세요!





#Cost function   #오차함수   #Maximum Likelihood Estimation (MLE)   #Cross Entropy   

#Logistic cost function

 


P.S 2장에서와 같이 책을 하나 더 추천해 주고 싶은데요. 수식에 대한 이해를 좀 더 깊게 하시고 싶으신 분이 계신다면 아래 책을 추천해드려요! 이번장에서 설명한 내용 대부분은 아래 책을 참고했으니 관심있으신 분은 한 번 읽어보시길 바랍니다!



<사진5>





[사진래퍼런스]

사진1

http://www.yoonsupchoi.com/wp-content/uploads/2017/08/neuron.jpg

사진2,3,4

https://www.youtube.com/watch?v=XepXtl9YKwc

사진5

https://www.coupang.com/vp/products/41622004?itemId=151541085&vendorItemId=3349262725&src=1042503&spec=10304968&addtag=400&ctag=41622004&lptag=GOOGLE_SHOPPING&itime=20191230173732&pageType=PRODUCT&pageValue=41622004&wPcid=11713953347767192453648&wRef=&wTime=20191230173732&redirect=landing&isAddedCart=

Q.학습이란 무엇인가요? 신경망이 어떻게 학습을 할 수 있다는 것인가요?

Q. L1 loss function이 뭔가요? L2 loss function이 뭔가요?




우리는 학습이라는 것을 하기 위해 아래와 같은 과정을 거칩니다. 예를 들어, 기계가 탁구치는 것을 학습한다고 가정해볼께요.




① 처음에는 기계가 사람이 넘겨준 공을 칩니다.

② 하지만, 상대방 테이블에 정확히 들어가지 않습니다. 

③ 기계는 자신의 행위가 잘 못 되었음 (error)을 인지하고 자세를 바꿉니다.

④ 상대방 테이블에 정확히 들어갈때까지 계속 자세를 바꾸는 과정을 반복합니다.


아주 간단하게 보면 학습이라는 것은 어떤 정답이되는 결론에 도달하기 위해 수 없이 시행착오(trial-error)를 거치는 행위를 의미하게 됩니다.



그렇다면 기계는 시행착오를 통해 어떤 방식으로 학습을 할까요? 기계를 학습시키기 위해 몇몇 학자들이 신경망(Neural Network)이라는 모델을 제시하게 되는데, 그 중 대표적인 모델이 perceptron 입니다. (Rosenblatt이 제시한 perceptron(퍼셉트론)이라는 모델은 딥러닝의 기원이 되는 중요한 모델입니다!)



Perceptron은 뉴런(Neuron)의 작동방식을 본 떠서 만들어졌습니다. 수 많은 뉴런들은 서로 연결되어 전기신호를 주고 받습니다. 




예를 들어, A,B,C,D 라는 뉴런들이 서로 연결되어 있다면, 공부를 할 때는 A->D->C->B, 운동을 할 때는 A->B->D->C 라는 경로를 통해 신호를 전달하게 됩니다. 이러한 뉴런들은 뇌에서 일어나는 모든 활동들에 관여하면서 사물을 인지하고, 학습하고, 판단함으로써 지능적인 역할을 담당하게 되었습니다.


그렇다면 하나의 인공신경망(뉴런)이 어떻게 학습하는지 김성훈 교수님의 동영상을 보면서 이해해 볼까요?


<사진1>





학습이 되는 과정을 이해하기 위해서는 미분의 기하적인 개념을 이해하면 좋은데요. 아래 강의를 보시면서 미분의 개념은 쉽게 잡으시고 강의를 이어서 보시는걸 추천합니다.







지금까지 설명한 내용들을 수식으로 정리해봤어요. 앞으로 딥러닝을 하시게 되면 아래와 같은 그림과 수식들이 쉽게 눈에 들어와야해요!



강의만 들으셔도 학습이 어떻게 되는지 쉽게 이해되시죠? 그런데 문제는 우리가 학습하는 이유가 단지 무언가를 분류를 하기 위해서만 한다는것이 아니라는 점이에요. 예를들어, 무엇인가를 예측하기 위해서도 학습을 하기는 것처럼, 다양한 목적에 따라 학습을 하기도해요. 



1) L2 loss function


유튜부 강의에서 설명한 cost function은 MSE(Mean Square Error)라고해요. MSE는 Least Square Error (LSE) 또는 L2 loss function이라고도 불립니다.






2)L1 loss function


L2 loss function이 있으면, L1 loss function도 있겠죠? L1 loss function의 수식부터 설명하자면 아래와 같아요.


L1 loss function은 Least Absolute deviations (LAD) 또는 Least Absolute Errors (LAE)라고도 불린다고 해요.



3) L2 loss function VS L1 loss function


두 cost function의 공통점은 오차값을 0이상의 양수의 범위로 제한해준다는 점이에요. 제곱과 절대값은 항상 음이 아닌 정수가 나오겠죠?


두 함수의 큰 차이점은 오차값의 크기를 증가시키는 '정도'라고 생각해요. 예를 들어, L2 loss function 같은 경우에는 L1 loss function에 비해 오차값의 크기가 클 수록 더욱 오차의 정도를 배가시키고, 작을 수록 (0<오차값<1) 더욱 감소시키는 경향이 있어요. 


간혹 outlier가 되는 값들이 오차값을 크게 일으키고는 하는데, 이러한 outlier에 영향을 덜 받고 싶다면 L1 loss function을 쓰는것도 하나의 방법이겠어요!



그럼 지금까지 배운내용을 종합해볼께요. 


1. 신경망을 학습을 시킨다는 것은 가중치(w)를 학습시킨다는 것이다.

2. 가중치를 학습하기 위해서는 아래와 같은 과정을 거친다.

- E(w)는 cost function을 통해 얻은 cost value이다. (E(w)=J(Θ))

- 입실론은 learning rate이며 신경망이 적절하게 학습할 수 있도록 도와준다

('사진4'에서 볼 수 있듯이 만약 learning rate이 너무크면 최적화된 값을 갖지 못하고 오히려 cost value 발산하게 되고, learning rate이 너무작으면 학습하는데 오랜시간이 걸린다) 



<사진4>







자! 그럼 마무리 질문을 던져볼께요~


지금까지 설명한 것처럼 모든 학습의 cost function을 L1 or L2 loss function을 사용할까요? 결론부터 말하자면 "아닙니다!" 


우리가 학습하기 위한 목적 또는 문제정의를 어떻게 하는지에 따라서 다양한 cost function이 쓰여요. 그래서 다음장 부터 cost function에 대해 좀 더 다루어보려고 합니다!


P.S 홍보는 절대 아니구요. 저같이 수학적 백그라운드가 없던 사람도 아래 책을 보고 신경망이 학습하는 원리를 굉장히 구체적이고 직관적으로 이해할 수 있었어요. 그래서 공부하실 때, 같이 보시면 좋을 것 같아서 소개할께요!


<사진5>





#퍼셉트론 #Perceptron #학습 #신경망 #Artificial Neural Network #Neural Network #Cost function

#L1 loss function  #Least Absolute Deviations (LAD)  #Least Absolute Errors (LAE)  

#L2 loss function  #Least Square Error (LSE)   #Mean Square Error (MSE)





[사진 래퍼런스]

사진1

http://www.yoonsupchoi.com/wp-content/uploads/2017/08/neuron.jpg

사진2

http://m.hanbit.co.kr/store/books/book_view.html?p_code=B1910379076

사진4

https://www.jeremyjordan.me/nn-learning-rate/

사진5

한빛미디어




딥러닝의 부모님은 누굴까? 딥러닝은 어디서부터 시작된걸까? 



딥러닝이라는 뜻을 이해하기 전에 간단히 딥러닝이 파생된 경로에 대해서 먼저 알아보겠습니다.


<사진1>




딥러닝이란 개념은 "인공지능(Artificial Intelligence; AI)->기계학습(Machine Learning; ML)->딥러닝(Deep Learning(DL)" 순서를 통해 파생이 됐습니다. 그렇다면 딥러닝과 인공지능은 어떤 관계가 있는걸까요?

이 둘간의 관계를 알아보기 위해 인공지능에 대해서 먼저 알아보겠습니다!



[1.인공지능의 탄생]

 

 사실 인공지능의 기원에 대해서는 의견이 분분하지만 여기에서는 "앨런튜링(Alan Turing)"이라는 사람을 소개하면서 인공지능의 기원에 대해서 설명해 보겠습니다!




<사진2>



튜링이 쓴 논문의 첫 번째 문장입니다. "기계가 생각할 수 있을까?" 

튜링이 직접적으로 '인공지능'이라는 단어를 언급하진 않았지만, 

최초로 인간이 아닌 인공물(기계)이 생각이라는 것을 할 수 있을지에 대한 의문을 던진사람이라고 합니다!

(뭐 그 이전에 이런 비슷한 질문을 한 사람이 있다고 하긴 하더구요 ^^;;ㅎㅎ)


위 논문에서 포인트는 "'생각(Thinking)'이라는 것을 어떻게 정의할 수 있느냐?"라는 부분인데,

튜링은 '생각한다'라는 행위를 어떻게 정의했을까요? 어떻게 하면 '기계가 생각할 수 있는지 없는지'판단할 수 있을까요? 튜링은 논문에서 '튜링머신(Turing Test)'이라는 예시를 통해 '생각'이라는 행위를 정의했다고 합니다.


<사진3>



①실험대상에는 질문자(가운데), 사람(왼쪽), 기계(오른쪽)가 있다.

②사람과 기계는 각각 격리된 방에 들어가 있는데, 질문자는 이 사실을 모른다.

③질문자는 사람인지 기계인지 구별하기 위해 왼쪽과 오른쪽방에 질문을 하게 된다.

④질문자가 최종적으로 오른쪽을 사람이라고 판단했다면, 기계가 (사람처럼) 생각할 수 있다고 말할 수 있다.



튜링의 이와 같은 노력은 인간의 지능을 모방하려는 유의미한 시도였고, 훗날 인간의 지능을 모방하려는 수 많은 시도를이 수반된 끝에 한 끝에 학계가 만들어지고, Artificial Intelligence라는 학문이 탄생했습니다.


인공지능 교재들을 자세히 보면 "지능"이라는 개념을 어떻게 정의하고, 지능과 관련된 문제들을 어떻게 풀건지에 대한 방법론 들이 나와 있습니다.



그 중에서 Learning(학습)이라는 개념과 인공신경망(Artificial Neural Network; ANN)이라는 개념이 포함되어 있는데, 딥러닝에서 필요한 두 가지 핵심 키워드(Learning, ANN)가 인공지능이라는 분야에서 나왔다는 걸 알 수 있습니다.


(사실 기계학습 분야도 설명하긴 해야하는데, 이 부분은 나중에 작성하도록 할께요!)


그렇다면, 딥러닝의 기원이라고 할 수 있는 인공신경망(ANN)은 뭘까요? 다음 chapter에서 확인해보겠습니다!






[요약]

딥러닝의 부모님은 인공지능이다 -> 인공지능이 뭔데? -> 인공지능의 한 분야인 인공신경망은 딥러닝의 기원!






P.S

인공지능과 관련된 영화는 많지만 그 중에서 앨런튜링의 일대기를 담은 영화를 추천드려요!! ㅎㅎ




0:43 -> "Like a person.. electrical brain.. digital computer"





[이미지 레퍼런스]

사진1

https://www.kdnuggets.com/2017/07/rapidminer-ai-machine-learning-deep-learning.html

사진2 

https://www.csee.umbc.edu/courses/471/papers/turing.pdf

사진3

https://wsimag.com/science-and-technology/36961-no-turing-test-for-consciousness


[영상 래퍼런스]

https://www.youtube.com/watch?v=nmXzPgVjxRw




+ Recent posts