(*이 시리즈의 내용은 모두 '인공지능 100점을 위한 파이썬 수학' 서적의 내용을 정리한 것입니다. 사진과 같은 자료들 또한 출처가 위 책임을 밝힙니다.)
인간의 신경세포를 본떠 인공지능에 도입한 것이 퍼셉트론이다.
퍼셉트론은 뉴런과 같이 다수의 입력을 받고 그것을 조합해서 하나의 출력을 만들고, 이 신호는 여러 곳으로 전달될 수 있다.
이것을 여러 번 적용해서 적층한 것이 신경망 중 딥러닝의 특징이다.
과거 퍼셉트론이 해결하지 못했던 XOR 문제를 2개 층을 중첩하여 사용함으로써 극복했다.
책 124 페이지를 봐야함.
활성화 함수: 입력 신호의 총합을 출력 신호로 변환하는 함수
어떤 값이 들어왔으 ㄹ때 그 값을 어떻게 변형해서 출력으로 내보낼지를 결정하는 함수
활성화 함수라고도 한다.
퍼셉트론은 입력값을 모아 그것이 일정한 임계치를 넘었는지 아닌지를 판별해야 하는데, 이때 활성화 함수를 사용한다.
(1) 계단함수
(2) 시그모이드(sigmoid) gkatn
곡선, 즉 S자형 곡선을 가지는 함수. 상당히 많은 곳에 사용된다.
출력의 최솟값과 최댓값이 0과 1사이이다.
중간값, 즉 입력 x가 0일 때 0.5를 출력값으로 갖는다.
입력이 아무리 큰 값이더라도 출력은 1이고, 입력이 음의 값으로 작아지면 0에 가까워진다.
기울기, 각 점의 미분값은 0에서 최댓값 .25를 갖는다.
입력이 작아지거나 커지면 기울기인 미분값은 점점 작아져서 0에 가까워진다.
시그모이드 함수가 최근에는 많이 사용되지 않는 이유?
첫째. x가 커지면 기울기가 계속 줄어드는 특징 때문이다: x = [0,1,2,3,4,5,6]일 때, 기울기 값은 [0.24994, 0.19659, 0.10500, 0.04519, 0.01766, 0.00665, 0.00246]인데, 미분값 0.00246의 의미는 입력이 1 변화할 때 출력은 0.00246 변한다는 뜻이다. 즉, 출력을 1만큼 변화시키는 데 필요한 입력의 변화량이 406(=1/0.00246)이 된다.
둘째. 컴퓨터에서 호출하는 exp() 함수 사용에 많은 시간과 메모리가 필요하다: 활성화 함수는 신경망 프로그램의 많은 부분을 담당하는데, 여기에 많은 시간과 메모리가 사용되면 그만큼 효율이 떨어진다.
(3) 하이퍼볼릭 탄젠트(tanh)
시그모이드 함수와 마찬가지로 S자 곡선을 가지는 미분 가능한 활성함수.
비선형이고, 0.5가 아닌 0을 기준으로 대칭이라는 점에서 시그모이드와 차이가 있다.
(이 때문에 시그모이드보다 학습 속도가 빠르다!)
시그모이드와 마찬가지로 입력값이 크더라도 1과 -1의 제한에 걸리기 때문에 여러 층의 활성함수를 거치면 기울기값을 소멸시킨다는 단점이 있다.
(4) ReLU(렐루, Recitified Linear Unit)
계단 함수와 유사한 모양이지만 상한선의 제한이 없다.
입력이 0인 부분에서 기울기를 측정할 수 없기 때문에 미분 불가능.
입력값이 0 이하면 출력은 0으로 수렴, 0 이상이면 출력은 입력과 동일하다.(p.143 그래프 참고)
파이썬 코드로 구현할 때 최댓값을 반환해주는 numpy의 maximum() 함수를 사용하면 편리하다.
(max() 함수는 array와 함께 사용할 수 없기 때문에 maximum()을 사용한다!)
시그모이드와 하이퍼볼릭 탄젠트와 달리 복잡한 계산이 사용되지 않는다.
(0보다 작으면 0, 0 이상이면 입력값을 그대로 출력하기 때문에 컴퓨팅 파워를 거의 소모하지 않는다.)
기울기값 소멸을 극복하였다.