본문으로 바로가기

Artifical Neral Networks (ANN) - 강의

신경망은 실수형으로 구성된 vector를 인풋으로 받아 weight를 곱하고,

이 inputs의 선형 합을 계산한다.

(w0은 편향, w0은 항상 1이다.)

(계단 함수를 활성화함수로 사용할 경우) 선형 합이 0보다 클 경우 Output은 1, 아니라면 -1이다.


Neurons integrate information

뉴런은 정보를 통합한다.

Neurons pass information about the level of their input

뉴런은 인풋 레벨의 정보를 pass한다(넘겨준다).

Brain structure is layered

뇌구조는 layered하다 (여러 층으로 이루어져 있다)

The influence of one neuron on another depends on the strength of the connection between them

한 뉴런의 다른 뉴런에의 영향은 그들이 얼마나 강하게 연결되어 있느냐에 의존한다.

Learning is achieved by changing the strengths of connections between neurons

Learning(학습)은 뉴런들 간 관계의 강도를 변경시켜줌으로써 성취된다. (실제로 관계가 있는 것이라면 강도를 높여주는 방식)

 

신경망


신경망은 입력층, 출력층, 은닉층으로 이루어져 있다.

위의 신경망은 모두 3층으로 구성되지만, 가중치를 갖는 층은 2개뿐이기 때문에 2층 신경망이라고 한다.

문헌에 따라서는 신경망을 구성하는 층수를 기준으로 '3층 신경망'이라고 하는 경우도 있으니 주의해야 한다.

이 책에서는 실제로 가중치를 갖는 층의 개수(입력층, 은닉층, 출력층의 합계에서 1을 뺀 값)을 기준으로 한다.

 

이전 포스팅에서 작성했던 퍼셉트론에 관한 식이다.

퍼셉트론에서, 조건 분기의 동작(0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력)을 하나의 함수로 나타낼 수 있다.

이 함수를 h(x)라 하면 이전 포스팅의 식을 다음 식으로 표현할 수 있다.

식 3.3

활성화 함수


위의 h(x)는 입력 신호의 총합을 출력 신호로 변환하는 함수라고 할 수 있다. => 활성화 함수(activation function)

입력 신호의 총합이 활성화를 일으키는지를 정하는 역할을 한다.

위의 식은 가중치가 곱해진 입력 신호의 총합을 계산하고, 그 합을 활성화 함수에 입력해 결과를 내는 2단계로 처리된다.

그래서 이 식은 다음과 같은 두 개의 식으로 나눌 수 있다.

지금까지의 뉴런을 그림으로 표현하면 다음과 같다.

a를 함수 h()에 넣어 y를 출력한다.

뉴런을 원 하나로 표현하는 경우도 있고, 위의 그림과 같이 활성화 함수를 명시하여 표현하는 경우도 있다.

 

식 3.3과 같은 활성화 함수는 임계값을 경계로 출력이 바뀌는데, 이런 함수를 계단 함수(step functino)라고 한다.

물론 다른 형태의 활성화 함수들도 존재한다.

많은 활성화 함수들

시그모이드 함수


시그모이드 함수(sigmoid function)는 신경망에서 자주 이용되는 활성화 함수이다.

sigmoid 활성화 함수

위의 그림에서도 알 수 있듯, 0과 1 사이의 값을 반환한다.

앞에서 본 퍼셉트론과 앞으로 볼 신경망의 주된 차이는 이 활성화 함수이다.

계단 함수 구현


step_function

numpy의 broadcasting을 사용하여 간단하게 구현할 수 있다.

시그모이드 함수 구현


sigmoid_function

마찬가지로 numpy의 broadcasting을 사용한다.

시그모이드 함수와 계단 함수 비교


시그모이드 함수는 부드러운 곡선이며 입력에 따라 출력이 연속적으로 변화한다.

또, 계단 함수가 0과 1 중 하나의 값만 돌려주는 반면 시그모이드 함수는 실수를 돌려준다.

다시 말해 퍼셉트론에서는 뉴런 사이에 0 혹은 1이 흘렀다면, 신경망에서는 연속적인 실수가 흐른다.

 

한편 계단 함수와 시그모이드 함수는 입력이 중요하면 큰 값을 출력하고 입력이 중요하지 않으면 작은 값을 출력한다.

그리고 입력이 아무리 작거나 커도 출력은 0에서 1 사이이다.

중요한 공통점으로, 둘 모두는 비선형 함수이다.

cf) 비선형 함수는 문자 그대로 '선형이 아닌' 함수를 말한다. 즉, 직선 1개로는 그릴 수 없는 함수이다.

 

신경망에서는 활성화 함수로 비선형 함수를 사용해야 한다. 달리 말하면 선형 함수를 사용해서는 안 된다.

선형 함수를 이용하면 신경망의 층을 깊게 하는 의미가 없어진다.

선형 함수의 문제는 층을 아무리 깊게 해도 '은닉층이 없는 네트워크'로도 똑같은 기능을 할 수 있다는 데에 있다.

 

h(x) = cx라고 할 때,

y(x) = h(h(h(x)))인 3층 네트워크를 쌓았다고 해 보자.

그런데 이 계산은 실은 y(x) = ax와 똑같은 식이다.

a = c**3이라고만 하면 말이다.

즉, 여러 층으로 구성하는 이점을 살릴 수 없다.

ReLU 함수


최근에는 ReLU 함수를 주로 이용한다.(Rectified Linear Unit)

ReLU는 입력이 0을 넘으면 그 입력을 그대로 출력하고, 0 이하이면 0을 출력하는 함수이다.