인공 신경망은 사람의 뇌에서 영감을 받은 컴퓨터 모델이다.
이 모델은 여러 개의 뉴런(노드)으로 구성되어 있고, 이 뉴런들은 신호를 주고받으면서 작동한다.
예를 들어..
우리가 어떤 사진을 보고 고양이인지 개인지 판별하는 작업을 한다고 가정해보자.
이 작업을 인공 신경망으로 수행한다면, 여러 개의 노드가 연결된 네트워크가 필요하다.
퍼셉트론은 인공 신경망의 초기 형태로, 하나의 뉴런을 기반으로한 단층 신경망이다.
퍼셉트론은 입력층, 출력층, 그리고 가중치로 이루어진 구조를 가지고 있다.
입력층은 신경망에게 주어진 입력을 받는 부분이다.
예를 들어, 사진에서 고양이와 개를 구별하기 위해서는 사진의 픽셀값을 입력으로 받아야 한다.
출력층은 신경망이 최종적으로 내놓는 결과물을 말한다.
위의 예시에서는 고양이인지 개인지를 결정하는 값(0/1)을 출력으로 내보낸다.
가중치는 신경망에서 중요한 역할을 한다.
각각의 노드는 입력으로부터 들어온 신호에 가중치를 곱한 값을 계산하고, 이들을 모두 합산하여 다음 노드로 전달한다.
가중치는 신경망이 학습하는 과정에서 조정되는 값으로, 올바른 결과를 만들기 위해 학습 과정에서 최적화된다.
위의 그림같이 입력이 두 개(x1, x2) 있다고 할 때 컴퓨터가 논리적으로 인식하는 방식을 알아보기 위해 논리게이트로 확인해보자.💡 요약
인공 신경망은 입력층에서 입력을 받아 출력층에서 결과를 출력하는데, 그 사이에서 가중치를 사용하여 신호를 처리하고 전달한다. 퍼셉트론은 인공 신경망의 단순한 형태 중 하나로, 입력 신호에 가중치를 곱하여 임계값과 비교한 후 결과를 출력한다.
AND 게이트
모든 입력이 1일때 작동한다. 즉, 입력 중 어떤 하나라도 0이면 작동을 멈춘다.
OR 게이트
입력이 모두 0이 아니라면 모두 작동한다.
XOR 게이트
배타적 논리합이라는 용어로, 입력 두 개 중 한개만 1일 경우에 작동한다.
XOR 게이트는 데이터가 비선형적으로 분리되기 때문에 제대로 된 분류가 어렵다.
💡 데이터가 비선형적으로 분리된다?
- 입력 (0, 0) -> 출력 0
- 입력 (0, 1) -> 출력 1
- 입력 (1, 0) -> 출력 1
- 입력 (1, 1) -> 출력 0
데이터를 2D 좌표 평면에 점을 찍어보면, 출력이 0인 두 점 (0,0)과 (1,1)은 같은 그룹을 이루고, 출력이 1인 두 점 (0,1)과 (1,0)은 다른 그룹을 이룬다.
⇒ 이 두 그룹을 하나의 직선으로 분리하는 것은 불가능하기 때문에 비선형적으로 분리된다는 것.
딥러닝이란?
가중치
가중합 (=전달함수)
활성화함수
활성화함수 종류
- 시그모이드 함수
- 선형 함수의 결과를 0~1사이에서 비선형 형태로 변형해줌.
- 주로 로지스틱 회귀와 같은 분류문제를 확률적으로 표현하는 데 사용
- 단점 : 딥러닝 모델의 깊이가 깊어지면 기울기 소멸 문제가 발생- 하이퍼볼릭 탄젠트 함수
- 선형 함수의 결과를 -1~1사이에서 비선형 형태로 변형해줌.
- 시그모이드에서 결괏값의 평균이 0이 아닌 양수로 편향되는 문제 해결
- 기울기 소멸문제는 여전
- 렐루 함수
- 입력(x)이 음수라면 0 출력, 양수라면 x 출력
- 경사하강법에 영향을 주지 않아 학습 속도가 빠름 (하이퍼의 6배)
- 기울기 소멸 문제 x
- 일반적으로 은닉층에서 사용
- 리키 렐루 함수
- 입력값이 음수면 0에 근접한 수 반환, 양수면 x출력
- 입력값이 수렴하는 구간이 제거되어 렐루의 문제점 해결
- 소프트맥스 함수
- 입력값을 0~1 사이에 출력되도록 정규화하여 출력값들의 총합이 항상 1이 되도록 함.
- 딥러닝에서 출력 노드의 활성화함수로 많이 사용.
렐루 함수와 소프트맥스 함수를 파이토치에서 구현
class Net(torch.nn.Module):
def __init__(self, n_feature, n_hidden, n_output):
super(Net, self).__init__()
self.hidden = torch.nn.Linear(n_feature, n_hidden) - 은닉층
self.relu = torch.nn.Relu(inplace=True)
self.out = torch.nn.Linear(n_hidden, n_output) - 출력층
self.softmax = torch.nn.Softmax(dim=n_output)
def forward(self, x):
x = self.hidden(x)
x = self.relu(x) - 은닉층을 위한 렐루 활성화 함수
x = self.out(x)
x = self.softmax(x) - 출력층을 위한 소프트맥스 활성화 함수
return x
손실 함수
오차를 구하는 방법
학습을 통해 얻은 데이터의 추정치가 실제 데이터와 얼마나 차이가 나는지 평가하는 지표
0에 가까울수록 완벽하게 추정할 수 있음.
ex) 평균 제곱 오차(MSE), 크로스 엔트로피 오차(CEE)
평균 제곱 오차
실제 값과 예측 값의 차이를 제곱하여 평균을 낸 것
실제, 예측 값의 차이가 클수록 평균 제곱 오차의 값도 커짐
값이 작을수록 예측력이 좋다는 것
회귀의 손실 함수로 주로 사용
크로스 엔트로피 오차
분류에서 원-핫 인코딩했을 때에만 사용할 수 있는 오차 계산법
일반적으로 분류 문제에서 데이터의 출력을 0,1로 구분하기 위해 시그모이드 함수를 사용, 시그모이드 함수에 포함된 자연 상수 e 때문에 평균 제곱 오차를 적용하면 매끄럽지 못한 그래프(울퉁불퉁한 그래프)가 출력
이 함수를 사용하면 손실 함수를 적용할 경우 경사 하강법 과정에서 학습이 지역 최소점에서 멈출 수 있음. 이를 방지하고자 자연 상수 e에 반대되는 자연 로그를 모델의 출력 값에 취함.
4.2.2 딥러닝 학습
순전파, 역전파의 두 단계로 진행
순전파
네트워크에 훈련 데이터가 들어올 때 발생, 데이터를 기반으로 예측 값을 계산하기 위해 전체 신경망을 교차해 나감
모든 뉴런이 이전 층의 뉴런에서 수신한 정보에 변환(가중합 및 활성화 함수)을 적용하여 다음 층(은닉층)의 뉴런으로 전달하는 방식
네트워크를 통해 입력 데이터 전달, 데이터가 모든 층을 통과하고 모든 뉴런이 계산을 완료하면 예측값은 최종 층(출력층)에 도달하게 됨.
손실 함수로 네트워크의 예측 값, 실제 값의 차이(손실, 오차)를 추정함. 이때 손실 함수 비용은 0이 이상적임 → 손실 함수 비용이 0에 가깝도록 하기 위해 모델이 훈련을 반복하면서 가중치를 조정
역전파
손실(오차)이 계산되면 정보는 역으로 전파(출력층 → 은닉층 → 입력층)되기 때문에 역전파라 불림
예측 값과 실제 값 차이를 각 뉴런의 가중치로 미분한 후 기존 가중치 값에서 뺌, 이 과정을 출력층 → 은닉층 → 입력층 순서로 모든 뉴런에 대해 진행하여 계산된 각 뉴런 결과를 또다시 순전파의 가중치 값으로 사용
4.2.3 딥러닝의 문제점과 해결 방안
딥러닝의 핵심 : 활성화 함수가 적용된 여러 은닉층을 결합하여 비선형 영역을 표현하는 것
→ 활성화 함수가 적용된 은닉층 개수가 많을수록 데이터 분류가 잘되고 있음.
은닉층이 많을 때의 문제
과적합 문제
훈련 데이터를 과하게 학습해서 발생함.
훈련 데이터는 실제 데이터의 일부분인데, 과하게 학습했기 때문에 예측 값과 실제 값 차이인 오차가 감소, 검증 데이터에서는 오차가 증가할 수 있음
훈련 데이터에 대해 과하게 학습하여 실제 데이터에 대한 오차가 증가하는 현상 의미
→ 드롭아웃(dropout)으로 해결
신경망 모델이 과적합되는 것을 피하기 위한 방법, 학습 과정 중 임의의 일부 노드들을 학습에서 제외시킴
기울기 소멸 문제 발생
은닉층이 많은 신경망에서 주로 발생, 출력층에서 은닉층으로 전달되는 오차가 크게 줄어들어 학습이 되지 않는 현상
기울기가 소멸되기 때문에 학습되는 양이 0에 가까워져 학습이 더디게 진행되다 오차를 더 줄이지 못하고 그 상태로 수렴하는 현상
→ 시그모이드나 하이퍼볼릭 탄젠트 대신 렐루 활성화 함수를 사용하면 해결 가능
성능이 나빠지는 문제 발생
경사 하강법은 손실 함수의 비용이 최소가 되는 지점을 찾을 때까지 기울기가 낮은 쪽으로 계속 이동시키는 과정 반복, 이 과정에서 성능이 나빠지는 문제 발생
이를 해결하기 위해 확률적 경사 하강법, 미니 배치 경사 하강법 사용
배치 경사 하강법
전체 데이터셋에 대한 오류를 구한 뒤, 기울기를 한 번만 계산하여 모델의 파라미터를 업데이트하는 방법
전체 훈련 데이터셋에 대해 가중치를 편미분
속도를 조정하는 방법
아다그라드(Adagrad)
변수(가중치)의 업데이트 횟수에 따라 학습률을 조정하는 방식
많이 변화하지 않는 변수들의 학습률은 크게, 많이 변화하는 변수들의 학습률은 적게 설정
즉, 많이 변화한 변수는 최적 값에 근접했을 것이라는 가정하에 작은 크기로 이동하면서 세밀하게 값을 조정하고, 반대로 적게 변화한 변수들은 학습률을 크게 하여 빠르게 오차 값을 줄이고자 하는 방법
아다델타(Adadelta)
아다그라드에서 G값이 커짐에 따라 학습이 멈추는 문제를 해결하기 위해 등장한 방법
아다그라드의 수식에서 학습률(η)을 D 함수(가중치의 변화량(Δ) 크기를 누적한 값)로 변환했기 때문에 학습률에 대한 하이퍼파라미터가 필요하지 않음
RMSProp
아다그라드의 G(i) 값이 무한히 커지는 것을 방지하고자 제안된 방법
운동량을 조정하는 방법
모멘텀
매번 기울기를 구하지만, 가중치를 수정하기 전에 이전 수정 방향(+, -)을 참고하여 같은 방향으로 일정한 비율만 수정하는 방법
지그재그 현상이 줄어들고, 이전 이동 값을 고려하여 일정 비율만큼 다음 값을 결정하므로 관성 효과를 얻을 수 있는 장점
확률적 경사 하강법과 같이 사용
네스테로프 모멘텀 (Nesterov Accelerated Gradient)
모멘텀은 모멘텀 값과 기울기 값이 더해져 실제 값을 만드는 기존 모멘텀과 달리 모멘텀 값이 적용된 지점에서 기울기 값을 계산
모멘텀으로 절반 정도 이동한 후 어떤 방식으로 이동해야 하는지 다시 계산하여 결정하기 때문에 모멘텀 방법의 단점을 극복
모멘텀 방법의 이점인 빠른 이동 속도는 그대로 가져가면서 멈추어야 할 적절한 시점에서 제동을 거는 데 훨씬 용이
속도와 운동량에 대한 혼용 방법
아담 (Adam)
모멘텀과 알엠에스프롭의 장점을 결합한 경사 하강법
알엠에스프롭 특징인 기울기의 제곱을 지수 평균한 값과 모멘텀 특징인 v(i)를 수식에 활용함. 즉, 알엠에스프롭의 G 함수와 모멘텀의 v(i)를 사용하여 가중치를 업데이트
4.2.4 딥러닝을 사용할 때 이점
특성 추출
특성 추출 : 데이터별로 어떤 특징을 가지고 있는지 찾아내고, 그것을 토대로 데이터를 벡터로 변환하는 작업
특성 추출 과정을 알고리즘에 통합시킴
빅데이터의 효율적 활용
딥러닝을 이용한 특성 추출은 데이터 사례가 많을수록 성능이 향상됨
반대로, 확보한 데이터가 적다면, 딥러닝의 성능 향상을 기대하기 힘들기에, 머신 러닝을 고려해 보아야 함.
4.3 딥러닝 알고리즘
심층 신경망을 사용한다는 공통점이 있음
4.3.1 심층 신경망
심층 신경망 (DNN)
입력층과 출력층 사이 다수의 은닉층을 포함하는 인공 신경망
다수의 은닉층을 추가했기 때문에 별도의 트릭 없이 비선형 분류가 가능
다양한 비선형적 관계를 학습할 수 있는 장점이 있지만, 학습을 위한 연산량이 많고, 기울기 소멸 문제가 발생할 수 있음
→ 이를 해결하기 위해 드롭아웃, 렐루 함수, 배치 정규화 등을 적용해야 함.
4.3.2 합성곱 신경망
합성곱 신경망 (Convolutional Neural Network, CNN)
합성곱층, 풀링층을 포함하는 이미지 처리 성능이 좋은 인공 신경망 알고리즘
영상 및 사진이 포함된 이미지 데이터에서 객체를 탐색하거나 객체 위치를 찾아내는데 유용한 신경망
이미지에서 객체, 얼굴, 장면을 인식하기 위해 패턴을 찾는데 특히 유용 ex) LeNet-5, AlexNet, VGG, GoogLeNet, ResNet
기존 신경망과의 차별성
각 층의 입출력 형상을 유지
이미지의 공간 정보를 유지하면서 인접 이미지와 차이가 있는 특징을 효과적으로 인식
복수필터로 이미지의 특징을 추출하고 학습
추출한 이미지의 특징을 모으고 강화하는 풀링층이 있음
필터를 공유 파라미터로 사용하기 때문에 일반 인공 신경망과 비교하여 학습 파라미터가 매우 적음
4.3.3 순환 신경망
순환 신경망 (Recurrent Neural Network, RNN)
시계열 데이터 (음악, 영상 등) 같은 시간 흐름에 따라 변화하는 데이터를 학습하기 위한 인공 신경망
순환 : 자기 자신을 참조, 현재 결과가 이전 결과와 연관이 있다는 의미
순환 신경망의 특징
시간성을 가진 데이터가 많음
시간성 정보를 이용하여 데이터의 특징을 잘 다룸
시간에 따라 내용이 변하므로 데이터는 동적이고, 길이가 가변적
매우 긴 데이터를 처리하는 연구가 활발히 진행
기울기 소멸 문제로 학습이 제대로 되지 않는 문제가 있는데, 메모리 개념을 도입한 LSTM으로 보완
자연어 처리 분야와 궁합이 잘 맞음 ex) 언어 모델링, 텍스트 생성, 자동 번역, 음성 인식, 이미지 캡션
4.3.4 제한된 볼츠만 머신
볼츠만 머신
가시층 (visible layer), 은닉층 (hidden layer)으로 구성된 모델
가시층은 은닉층과만 연결되는데(가시층과 가시층, 은닉층과 은닉층 사이 연결이 없는 층) 이것이 제한된 볼츠만 머신
제한된 볼츠만 머신의 특징
차원 감소, 분류, 선형 회귀 분석, 협업 필터링, 특성 값 학습, 토픽 모델링에 사용
기울기 소멸 문제를 해결하기 위해 사전 학습 용도로 활용 가능
심층 신뢰 신경망 (DBN)의 요소로 활용
4.3.5 심층 신뢰 신경망
심층 신뢰 신경망 (Deep Belief Network, DBN)
입력층과 은닉층으로 구성된 제한된 볼츠만 머신을 블록처럼 여러 층으로 쌓은 형태로 연결된 신경망
사전 훈련된 제한된 볼츠만 머신을 층층이 쌓아 올린 구조로, 레이블이 없는 데이터에 대한 비지도 학습이 가능
부분적인 이미지에서 전체를 연상하는 일반화와 추상화 과정을 구현할 때 사용하면 유용
학습 절차 1. 가시층과 은닉층 1에 제한된 볼츠만 머신을 사전 훈련합니다. 2. 첫 번째 층 입력 데이터와 파라미터를 고정하여 두 번째 층 제한된 볼츠만 머신을 사전 훈련합니다. 3. 원하는 층 개수만큼 제한된 볼츠만 머신을 쌓아 올려 전체 DBN을 완성합니다.
심층 신뢰 신경망의 특징
순차적으로 심층 신뢰 신경망을 학습시켜 가면서 계층적 구조를 생성
비지도 학습으로 학습
위로 올라갈수록 추상적 특성을 추출
학습된 가중치를 다층 퍼셉트론의 가중치 초기값으로 사용