본문 바로가기

딥러닝

딥러닝 내용 정리 2편

안녕하세요 딥러닝 리뷰 두번째 시간인데요 

오늘은 두번째인 만큼 더 많은 내용을 다뤄 보도록 해보겠습니다.

시작해볼까요~

 

퍼셉트론

저번시간에 배운 인간의 뉴런을 모델로 만든 퍼셉트론은 위와 같은 구조를 가집니다.

여러개의 입력 그에 대한 가중치(weight)편향(bias)을 통해서 y를 정의합니다.

 

가중치는 여기서 x1, x2등 입력 신호의 영향력을 나타내는 값이고

편향은 우리가 출력하려는 y값(뉴런)이 얼마나 쉽게 활성화 되는지 제어해주는 역할을 합니다.

 

어느하나 안중요한게 없죠~

 

 

여기서 우리는 한가지 기준을 정하여 0과 1로 y값을 정합니다 

(기준은 정하기 나름이지만 우리는 0을 기준으로 잡아보겠습니다)

 

앞서 위에서 살짝 언급했던 대로 0과 1로나누어 활성화 상태를 나타냅니다. [0(비활성화), 1(활성화)]

 

여기서 딥러닝의 개념중 하나인 활성화 함수라는 개념이 나타나게 되는데요!

 

 

 

 

활성화 함수

활성화 함수란 입력신호의 총합을 출력신호로 변환해주는 역할로 이름에서 알 수 있듯이 입력신호의 총합이 활성화를 일으키는지

정하는 역할을 합니다.

 

 

수식으로 보면 다음과 같으며

그림을 통해 이해를 좀더 돕겠습니다.

 

활성화 함수 

 

이렇게 h(x)를 통해서 우리는 활성화 함수 역할을 수행할 수 있습니다.

이렇게 스위치같은 역할을 하는 함수를 계단 함수라고 부르는데

 

왼쪽 계단(step)처럼 생겼습니다.(전기전자계열 전공자라면 회로이론등의 수업에서 unit step function을 보셨을 텐데 그걸 생각하시면 됩니다.)

 

오른쪽은 sigmoid라고 부르며 step 함수와는 다르게 연속적으로 증가하게 부드러운 곡선 형태로 되어있습니다.

이러한점은 신경망 학습에서 아주 중요한 역할을 하게 됩니다

 

계단함수는 0과 1중 하나의 값만 돌려주는 반면 시그모이드는 연속적으로 그사이에 있는 값도 돌려준다는 점이 다릅니다

정리하자면 퍼셉트론에서는 뉴런사이에 0 or 1을 흘렸다면  신경망에서는 연속적인 실수가 흐릅니다. 

                                                                                                                                     

 

반면 두가지에 공통점비선형성(non linear)을 띈다는 것입니다.  이점은 정말 중요합니다.

이전시간에서 xor과 같은 문제는 선형적으로는 도저히 풀 수 없는 문제였습니다. 그렇기 때문에 다층의 퍼셉트론을 설계하는데 있어서 선형함수의 시퀀스는 xor문제를 해결하는데 탁월하지 못한 선택입니다. 신경망을 겹겹이 쌓으면서 이러한 비선형적인 요소인 활성화함수를 집어 넣어주면 어떠한 문제라도 비선형적으로 접근하여 해결할 수 있을 것입니다.

                                                                                                                                                                          

실제 딥러닝에서도 sigmoid와 같은 수학적 모델 함수를 가져와 적용시킵니다

대표적으로 3개가 있는데 그래프와 식으로 보여드리겠습니다.

크게 3가지가 대표적인 예시인데 하이퍼볼릭 탄젠트(tanh)는 시그모이드와 동일한 형태를 띄지만 값의 범위는 -1~1입니다. 보기에는 큰 차이점이 없어보이지만 추후의 초기화 문제에서 다룰때 이차이점은 크게 적용됩니다.

다음으로는 현대에서 가장 많이쓰이는 ReLU(렐루)입니다. 이의 변종으로 다양한 ReLU가 있지만 ReLU가 가장 인간의 신경망과 비슷하다는 연구도 나올만큼 현대에서는 가장 많이 쓰이는 함수입니다.

 

 

다음으로는 출력층 설계하기에 관해서 다뤄 보겠습니다.

우리가 딥러닝을 적용하여 문제를 풀 때 크게 두 범주로 나눌 수 있습니다.

 

첫째는 회귀(Regression)입니다. 이름만 들어서는 무슨 문제인지 와 닿지 않기 때문에 예시를 들도록 하겠습니다.

예시) 학교에 학생들이 있습니다. 학생들은 시험을 앞두고 공부를 합니다. 시험을 본 뒤 설문조사를 하였습니다.

자신이 공부한 시간, 과외나 학원에서 배운 시간 등등 시험성적의 영향을 미칠수 있는 요소들의 시간을 조사하였습니다.

정확하게 시간과 비례해서 성적이 높은건 아니지만(학생마다 기본실력도 다르고 습득력도 다르기 때문에) 대체적으로 예외가 몇개 있지만 비례하는 모습을 보일겁니다.

이러한 데이터를 기반으로 자신의 공부한 시간을 대입하면 예상(predict) 성적을 얻을 수 있겠죠 

성적은 딱 하나로 정해진게 아니라 연속적인 값으로 볼 수 있습니다. 이렇듯 회귀는 딱 정해진 문제가아니라 현상을 보고 연속된 값에서 예측 값을 얻어내는 과정이라고 생각하시면 됩니다.

 

 

 

두번째로는 분류(classification) 가 있습니다. 회귀와는 다르게 글자만 보아도 대충 감을 잡으셨을 겁니다 그래도 확실히 하고 넘어가는게 중요하기 때문에 설명해 드리겠습니다. 사람은 동물을 보고 다양하게 구별 할 수 있습니다. 만약에 어떠한 사진을 보고 어떤 동물인지 구별하라하면 사람은 자신이 모르는 동물이 나오지 않는 이상 구별해 낼것입니다. 이렇듯

회귀처럼 연속된 값에서 어떤 값을 예측하는게 아니라 정답이 딱 정해진 문제에서 답을 고르는 것입니다. 시험문제(객관식)를 풀듯 1~5번중 하나만 고르는 것 이라고 생각하시면 됩니다.

 

그렇다면 신경망을 설계하는데 있어서 출력을 다르게 해줘야 원하는 예측값을 얻을 수 있겠죠?

그래서 이번에 할 내용은 항등함수 & 소프트 맥스 함수 입니다.

 

 

 

항등함수

항등이란 말은 어디서 한번 쯤은 들어 봤을 것이다

항등식(항상 성립하는 등식 이게 맞나 모르겠넴...) 같은 단어?

 

영어로는 Identity function

아마 대학교 1학년때 미적분학 시간에 배웠던거 같다.. 

졸업해서 가물가물하지만 ㅠㅠ 

아니면 선형대수 시간에 identity matrix 같은것도 배워 봤을 것이다.

 

쓸데없는 소리는 여기까지 하고 그림을 보면 알 수 있듯이

항등함수는 입력을 그대로 출력합니다. (Regression에서 사용)

 

항등함수에 의한 변환은 은닉층에서의 활성화 함수와 마찬가지로 화살표로 그립니다.

 

 

 

 

 

소프트 맥스 함수 

 

 

 

소프트 맥스 함수는 항등함수와 다르게 좀 복잡합니다.

입력이 모든 출력과 연결되어 영향을 끼치는 모습을 볼 수 있다.

 

수식을 보면 더 와닿겠지만 쉽게 설명하자면

전체 중 y(n) 될 확률을 나타낸다고 생각하시면 편합니다.

 

 

 

 

 

 

수식으로 한번 살펴 볼까요?

어우 벌써부터 머리아프죠.. 아마 비전공자 이시면 진짜 화가 나실겁니다.

화를 일단 추스르시고... 한번 살펴봅시다 exp는 exponential의 약자로 위에 sigmoid에 나오는 e(자연상수)를 의미한다.

(경상도에서는 2와 e를 음의 높낮이로 구별한다던데 으으... 또 TMI 밤에 글을 쓰다보니 의식흐름대로 글이 써지네요ㅎㅎ....)

 

분모의 exp옆에 있는기호는 시그마라고 읽고 총합이라고 생각하시면 됩니다.

음 총합분의 하나라.. 어디서 많이 보지 않으셨습니까?

자신이 전체중에서 얼마만큼의 영향력을 나타내는지 확률적으로 보여주는 모습을 볼 수 있습니다.

 

즉 y1 = 개, y2 = 고양이, y3 = 토끼 라고 정하고

exp(a1) = 15 , exp(a2) = 75, exp(a3) = 10  라고가정해봅시다.

그러면 y1 = 15 / (15 + 75 + 10 ) = 0.15  개일 확률은 15%

y2 = 75 / (15 + 75 + 10 ) = 0.75  고양이일 확률은 75%

y3 = 10 / (15 + 75 + 10 ) = 0.10  토끼일 확률은 10% 로 결과값을 얻을 수 있습니다.

 

입력은 즉 높은 확률로 고양이라 예측해 볼 수 있겠죠?

이렇게 소프트맥스는 분류 문제에서 사용됩니다.

 

항등함수와 다르게 소프트 맥스를 사용할 때 주의 할 점은 exp꼴이기 때문에 오버플로우(overflow)가 발생할 수 있습니다. 그래서 상수를 위아래로 곱하여 지수의 log꼴을 더하거나 빼서 이값이 오버 플로우가 발생하는 것을 방지 하여야합니다.

 

>오버플로우란? 프로그래밍을 안해본사람에게 설명해드리자면 컴퓨터는 자원이 한정적입니다. 그렇기 때문에 숫자를 담는 그릇의 크기 또한  한정적이기때문에 그 범위를 넘어나면 이상한 숫자로 바뀝니다.(사실은 음수로 자세하게 다루면 본질을 해치기 때문에 이이상은 설명하지 않겠습니다.) 이러한 그릇의 넘침(오버 플로우)을 방지 하기 위해 위와같은 편법을 사용하여 결과를 보존합니다.

 

 

 

오늘은 여기 까지 하도록 하겠습니다.

마음은 더나가고 싶었으나 내일도 출근을 해야하기 때문에 ㅠㅠ 벌써 시간이 1시가 넘었네요 찡찡거리는건 여기까지하고 다음시간에는 신경망 학습에 대해서 배워 보도록하겠습니다.

여러분들 코로나 조심하세요 벌써 800명이넘었네요 ㅠㅠ 건강한 한국으로 돌아갑시다! 

 

 

'딥러닝' 카테고리의 다른 글

Inductive Bias  (8) 2021.01.24
딥러닝 내용 정리 1편  (1) 2020.02.23