본문 바로가기
ML & DL/밑바닥부터 시작하는 딥러닝

[파이썬 딥러닝] 신경망

by Glory_Choi 2023. 3. 14.
반응형

퍼셉트론에서 신경망으로

신경망을 그림으로 나타내면 가장 왼쪽 Input(입력층), 중간 Hidden(은닝층), 오른쪽 Output(출력층)이라고 합니다. 은닉층의 뉴런은 사람 눈에는 보이지 않는습니다.

 

퍼셉트론 복습

 

X1과 X2라는 두 신호를 입력받아 Y를 출력하는 퍼셉트론입니다. 이 퍼셉트론을 수식으로 나타내면 다음과 같습니다.

식 1

여기서 b는 편향을 나타내는 매개변수로, 뉴런이 얼마나 쉽게 활성화되느냐를 제어합니다. 한편, w1과 w2는 각 신호의 가중치를 나타내는 매개변수로, 각 신호의 영향력을 제어합니다.

위의 네트워크에는 편향 b가 보이지 않는데 편향 b를 명시한다면 다음과 같습니다.

 

활성화 함수

활성화 함수란 입력 신호의 총합이 활성화를 일으키는지를 정하는 역할입니다.

 

시그모이드 함수

신경망에서 자주 이용하는 활성화 함수인 시그모이드의 식은 다음과 같습니다. 여기서 exp는 자연상수 e로 2.7182...의 값을 갖는 실수입니다.

신경망에서는 활성화 함수로 시그모이드 함수를 이용하여 신호를 변환하고, 그 변환된 신호를 다음 뉴런에 전달합니다. 신경망과 퍼셉트론의 차이는 활성화 함수라고 할 수 있습니다. 그 외 뉴런이 여러 츨으로 이어지는 구조와 신호를 전달하는 방법은 기본적으로 같습니다.

 

계단 함수 구현하기

 

시그모이드 함수 구현하기

 

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

공통점 :

둘 다 입력이 작을 때의 출력은 0에 가깝고(혹은 0이고), 입력이 커지면 출력이 1에 가까워지는(혹은 1이 되는) 구조입니다. 즉, 계단 함수와 시그모이드 함수는 입력이 중요하면 큰 값을 출력하고 입력이 중요하지 않으면 작은 값을 출력합니다.

그리고 입력이 아무리 작거나 커도 출력은 0에서 1 사이라는 것도 공통점입니다.

비선형 함수라는 공통점도 있습니다.

 

차이점 :

시그모이드 함수는 부드러운 곡선이며 입력에 따라 출력이 연속적으로 변화합니다. 한편, 계단 함수는 0을 경계로 출력이 갑자기 바뀌어버립니다. 다시 말해 퍼셉트론에서는 뉴런 사이에 0 혹은 1이 흘렀다면, 신경망에서는 연속적인 실수가 흐릅니다.

 

비선형 함수

신경망에서는 활성화 함수로 비선형 함수를 사용해야 합니다. 달리 말하면 선형 함수를 사용해서는 안 됩니다. 선형 함수를 사용하면 신경망의 층을 깊게 하는 의미가 없어지기 때문입니다.

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

예를 들어 h(x) = cx를 활성화 함수로 사용한 3층 네트워크를 떠올려보면 y(x) = h(h(h(x)))가 됩니다.

이 계산은 y(x) = c*c*c*x처럼 곱셈을 세 번 수행하지만 실은 y(x) = ax와 똑같은 식입니다. a = c^3라고 하면 끝이기 때문입니다. 즉, 은닉층이 없는 네트워크로 표현할 수 있습니다.

 

ReLU함수

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

수식으로는 아래와 같습니다.

ReLU 함수의 구현은 다음과 같이 쉽게 구현할 수 있습니다.

 

3층 신경망 구현하기

여기에서는 init_network() 와 forward() 라는 함수를 정의했습니다. init_network() 함수는 가중치와 편향을 초기화하고 이들을 딕셔너리 변수인 network에 저장합니다. 이 딕셔러니 변수 network에는 각 층에 필요한 매개변수(가중치와 편향)를 저장합니다. 그리고 forward() 함수는 입력 신호를 출력으로 변환하는 처리 과정을 모두 구현하고 있습니다.

함수 이름을 forward라 한 것은 순방향(입력에서 출력 방향)으로 전달됨(순전파)을 알리기 위함입니다. 이로써 신경망의 순방향 구현은 끝입니다. 보신 것처럼 넘파이의 다차원 배열을 잘 사용하면 신경망을 효율적으로 구현할 수 있습니다.

 

출력층 설계하기

신경망은 분류와 회귀 모두에 이용할 수 있습니다. 다만 둘 중 어떤 문제냐에 따라 출력층에서 사용하는 활성화 함수가 달라집니다. 일반적으로 회귀에는 항등 함수를, 분류에는 소프트맥스 함수를 사용합니다.

 

항등 함수

항등 함수는 입력을 그대로 출력합니다. 입력과 출력이 항상 같다는 뜻의 항등입니다. 그래서 출력층에서 항등 함수를 사용하면 입력 신호가 그대로 출력 신호가 됩니다. 항등 함수의 처리는 신경망 그림으로는 다음과 같습니다

소프트맥스 함수

분류에서 사용하는 소프트맥스 함수의 식은 다음과 같습니다.

exp(x)는 e^x를 뜻하는 지수 함수입니다. e는 자연상수 n은 출력층의 뉴런수, k는 k번째 출력을 나타냅니다.

분모에서 보듯, 출력층의 각 뉴런이 모든 입력 신호에서 영향을 받기 때문에 그림은 다음과 같습니다.

 

소프트맥스 함수 구현

소프트맥스 함수는 지수 함수를 사용하는데, 지수 함수란 것이 쉽게 아주 큰 값을 내뱉습니다. 때문에 개선이 필요합니다.

개선한 소프트맥스 함수는 다음과 같습니다.

 

소프트맥스 함수의 특징

보는 바와 같이 소프트맥스 함수의 출력은 0에서 1.0 사이의 실수입니다. 또, 소프트맥스 함수 출력의 총합은 1입니다. 출력 총합이 1이 된다는 점은 소프트 맥스 함수의 중요한 성질입니다.

이 성질 덕분에 소프트맥스 함수의 출력을 '확률'로 해석할 수 있습니다.

반응형