본문 바로가기

데이터사이언스/인공지능

인공신경망 ANN 이해하기(인공지능 핵심용어 등)

인공신경망(ANN)은 사람의 신경망을 본떠서 만든 알고리즘이다. 인공신경망이란 수많은 뉴런들을 서로 그물망처럼 묶어서 정보를 앞에서 뒤로 전달하며 출력층에 나온 값을 가지고 예측하는 알고리즘이다. 퍼셉트론을 이용해 만든 모든 구조물을 인공 신경망이라고하고 퍼셉트론을 하나만 사용하면 '단층신경망', 여러개를 사용한다면 '다층신경망'이라고 부른다.

딥러닝은 결과를 해석하는 일은 쉽지않다. 똑같은 코드를 누가 실행하느냐에 따라 결과가 바뀌고 성능이 좋게 나오면 운이 좋아서 그런 건지, 아니면 지금 데이터에 한해서만 성능이 좋은 건지 알기 어렵다.

신경계의 뉴런들은 작은 패턴을 찾아내는데 특화되어있고 작은 단위의 패턴을 다음 층의 인풋으로 사용해서 더 섬세하게 예측한다

 

※인간의 신경계: 몸 안팎에서 일어나는 변화로 인한 자극을 빠르게 전달해서 그에 대한 반응을 생성하는 기관들(뇌와 뇌까지 정보를 전달하는 모든 기관이 신경계에 포함)

 - 뜨러운것을 만졌을때 그 정보들을 뇌까지 그리고 그 안에서도 다양한 부분들에 전달해서 적정한 명령을 내리게 하는것

 - 신경계는 뉴런이라고 불리는 가장 기본적인 단위로 구성되어 있다

 - 뉴런에서 정보를 얻으면 그 정보는 전기,화학적 신호를 사용해서 전달이되는데 일정 자극이상일때만 신호를 보냄 (뉴런의 활성화)

 - 인간은 어떤일을 반복해서 연습하면 계속 더 잘해진다(학습한다)

 

1. 인공뉴런(퍼셉트론): 입력값과 가중치, 편향을 이용해 출력값을 내는 수학적 모델

 - 여기 모델은 함수라고 생각하면됨

 - 입력층: 입력값을 받아들이는 층

 - 노드: 입력값의 가중합과 활성화를 결정하는 층

 - 출력층: 퍼셉트론의 출력값을 나타내는 층 

 - ②가중치: 입력값이 여러개 중에서도 조금더 중요한 데이터가 있음(픽셀의 출력에 영향을 미치는 비중)

 - ③편향: 활성화 함수의 임곗값을 이동시키는 역할(이전 뉴런에서 일정이상(임계값)의 자극(입력)이 오지 않으면 다음뉴런으로 정보가 넘어가지 않음)

 - ⑥가중합(a): 입력값에 편향과 가중치가 적용이 된 값(입력값과 가중치를 곱해서 얻은 값) a = (x1w1 + x2w2 + b)  

입력값의 변화에 따른 가중합의 변화

 - 퍼셉트론의 출력값: F(x1w1 + x2w2 + b) = y   (여기서 F:활성화함수)

퍼셉트론 동작 원리

2. 활성화 함수: 뉴런의 출력을 다음 뉴런으로 넘길지를 결정하는 함수

 - 뉴런 자체가 뇌세포를 모방해서 만든 모델이기 때문에 뉴런끼리도 정보를 주고 받을 수 있어야함

 - 임계값을 기준으로 노드의 출력값을 결정하는 함수, 활성화 함수로 인해 층을 쌓는 효과가 생김

 - 시그모이드 함수 기준으로 활성함수의 값이 0.5보다 크다면 다음 뉴런에 1이라는 값을 전달

활성화 함수로 많이 쓰이는 시그모이드함수

 

 

3. 손실 함수: 정답과 신경망의 예측의 차이를 나타내는 함수(올바른 가중치를 찾기 위해 쓰임)

 - 더 좋은 결정경계를 찾는 방법으로 손실함수를 쓴다

 - 오차가 적은 것이 더 좋은 결정경계라고 본다

 - 대표적인 손실함수는 평균제곱오차(MSE), 크로스엔트로피오차(CE), 평균절대오차(MAE),  평균제곱근오차(RMSE)

오차가 적은 경계가 일반적으로 더 좋은 결정경계

 

4. 다층신경망: 단층신경망으로 분류할 수 없는 데이터를 분류함

 - 단층신경망은 하나의 직선을 이용해 데이터를 분류하지만 다층신경망은 선을 여러번 그어서 데이터를 분류함

다층신경망

 

 - ②은닉층은 굳이 값을 알 필요가 없기 때문에 출력값을 숨긴다 해서 붙여진 이름

 - 그림에서 입력층은 3, 층의 개수(층의 깊이)는 2, 노드의 수(층의 너비)는 2

 - 데이터가 왼쪽부터 오른쪽으로 전달되는데 이방향으로 정보가 전달되는 것을 '순전파'라고 함

 - GPU메모리가 부족할때는 은닉층의 너비를 줄이는 것보다 은닉층의 깊이를 줄이는 것이 더 효과적

단층 신경망과 다층 신경망의 구분

 

5. 경사하강법과 오차 역전파로 최적의 값 찾기

 - 실제로는 가중치값을 알수없는데 가중치를 알아내기 위해 경사하강법과 오차역전파를 쓴다. 

 - 데이터의 분포가 복잡해지면 은닉층 깊이를 늘리거나 은닉층의 뉴런 개수를 늘리게 되는데 그러면 은닉층마다 데이터를 구분해내는데 사용할 가중치를 구하기 어려워진다

 - 따라서 최적의 직선을 찾는 경사하강법과 오차 역전파를 사용함

 

6. 경사하강법: 함수의 기울기를 구하고 경사의 반대 방향으로 계속 이동시켜 최소값에 이를때가지 반복시키는 학습방법

 - 손실 함수를 미분해서 손실 함수의 경사면을 따라 조금씩 이동해나가며 최솟값에 다가가는 알고리즘

경사하강법

 

7. 오차역전파: 정답과 신경망이 예측한 값과의 오차를 최소화하는 가중치를 찾는 알고리즘

 - 미분의 연쇄법칙을 이용해 출력층에 가까운 가중치부터 수정해나간다.

 - 실제로는 수십만개의 가중치가 있기 때문에 손실함수를 사용해 일일이 가중치에 대해 미분해서 값을 수정하는일은 어려워 오차역전파 알고리즘을 이용함

 - 신경망의 출력층으로부터 입력층까지 오차가 거슬러 전달되며 정보의 방향이 순전파와 반대방향이므로 오차가 역전파한다고한다.

 - 미분의 연쇄법칙에 의해 층을 거칠수록 기울기가 누적되어 곱해지며 입력층에 가까운 가중치일수록 누적되는 기울기가 늘어나고 그렇게 입력층까지 기울기가 역전파되어 신경망의 모든 가중치를 수정해나감

오차역전파

 

참고: Must Have 텐초의 파이토치 딥러닝 특강, 코드잇(인공신경망이란)