본문 바로가기

AI.ML

[NLP 스터디] 1주차 정리 - 7. 딥러닝 개요

07-01 퍼셉트론

퍼셉트론

💡
초기 형태의 인공 신경망, 다수의 입력으로부터 하나의 결과를 내보내는 알고리즘
 
  • X는 입력값, W는 가중치, Y는 출력값을 의미
  • 가중치가 클수록 해당 입력값이 중요함을 의미
  • 뉴런에서의 입력 신호 = 퍼셉트론의 입력값
  • 뉴런에서의 출력 신호 = 퍼셉트론의 출력값
  • 뉴런에서의 축삭 돌기 = 퍼셉트론의 가중치
 

각 입력값과 그에 해당되는 가중치의 곱의 전체 합 > 임계치 ⇒ 1을 출력

각 입력값과 그에 해당되는 가중치의 곱의 전체 합 < 임계치 ⇒ 0을 출력

따라서 계단 함수의 형태를 이룸

 

💡
활성화 함수: 출력값을 변경시키는 함수 ex.) 계단 함수, 시그모이드 함수, 소프트맥스 함수

퍼셉트론의 활성화 함수는 계단 함수이지만 여기서 활성화 함수를 시그모이드 함수로 변경하면 퍼셉트론은 곧 이진 분류를 수행하는 로지스틱 회귀와 동일해짐

⇒ 로지스틱 회귀 모델이 인공 신경망에서는 하나의 인공 뉴런으로 볼 수 있음

⇒ 로지스틱 회귀를 수행하는 인공 뉴런과 퍼셉트론의 차이점? 활성화 함수!

단층 퍼셉트론

퍼셉트론은 단층 퍼셉트론과 다층 퍼셉트론으로 나뉘어짐

 

입력층(값을 보내는 단계)과 출력층(값을 받아서 출력하는 단계)로 이루어진 퍼셉트론을 단층 퍼셉트론이라 함

 

  • 단층 퍼셉트론이 할 수 있는 일⇒ AND, NAND, OR 게이트는 구현 가능
  • cf.) 컴퓨터는 두개의 값 0과 1을 입력해 하나의 값을 출력하는 회로가 모여 만들어지며, 이 회로를 게이트(gate)라고 함
  • 단층 퍼셉트론의 한계⇒ XOR 게이트는 구현 불가능
  • Why????
    AND, OR, NAND는 직선 하나로 두 영역을 나눌 수 있지만 XOR 게이트는 적어도 직선 두 개가 필요함 ⇒ 다층 퍼셉트론의 등장
 
 
 

다층 퍼셉트론(MLP)

다층 퍼셉트론과 단층 퍼셉트론의 차이점: 다층 퍼셉트론은 중간에 층을 더 추가함

은닉층: 입력층과 출력층 사이에 존재하는 층

심층 신경망: 은닉층이 2개 이상인 신경망, 다층 퍼셉트론만 해당하는 것이 아닌 여러 변형된 다양한 신경망들도 은닉층이 2개 이상이면 심층 신경망임

딥러닝: 심층 신경망을 학습시키는 것

#다층 퍼셉트론을 통한 XOR_gate 구현 def XOR_gate(x1, x2):   return AND_gate(NAND_gate(x1, x2),OR_gate(x1,x2))

07-02 인공 신경망(Artificial Neural Network) 훑어보기

피드 포워드 신경망(FFNN)

오직 입력층에서 출력층 방향으로 연산이 전개되는 신경망

순환 신경망(RNN)

은닉층의 출력값을 출력층으로도 값을 보내지만, 동시에 은닉층의 출력값이 다시 은닉층의 입력으로 사용됨

전결합층(FC)

다층 퍼셉트론은 은닉층과 출력층에 있는 모든 뉴런이 바로 이전 층의 모든 뉴런과 연결되어 있음.

어떤 층의 모든 뉴런이 이전 층의 모든 뉴런과 연결돼 있는 층전결합층 또는 완전연결층이라함.

활성화 함수

은닉층과 출력층의 뉴런에서 출력값을 결정하는 함수

(1) 활성화 함수의 특징 - 비선형 함수

선형 함수: 출력이 입력의 상수배만큼 변하는 함수

비선형 함수: 직선 1개로는 그릴 수 없는 함수

인공 신경망의 능력을 높이기 위해서는 은닉층을 계속해서 추가해야 함

그런데, 활성화 함수로 선형 함수를 사용하게 되면 은닉층을 쌓을 수가 없음

 

활성화 함수로 존재하지 않는 선형 함수 층을 사용하지 않는다는 의미는 아님.

활성화 함수를 사용하지 않는 층을 비선형 층들과 함께 인공 신경망의 일부로서 추가하는 경우도 존재 ⇒ 학습 가능한 가중치가 새로 생긴다는 점에서 의미가 있음

 

선형층, 투사층: 은닉층과 구분되는 층

임베딩 층: 일종의 선형층으로 활성화 함수 존재X

비선형층: 활성화 함수를 사용하는 일반적인 은닉층, 선형층과 대비되는 층

 

(2) 계단 함수

거의 사용되지는 않지만 퍼셉트론을 통해 인공 신경망을 처음 배울 때 접하게 되는 활성화 함수

 

(3) 시그모이드 함수와 기울기 소실

 

<인공 신경망(사진)의 학습 과정>

  1. 입력에 대해서 순전파 연산
  1. 순전파 연산을 통해 나온 예측값과 실제값의 오차를 손실함수를 통해 계산
  1. 손실을 미분을 통해서 기울기를 구함
  1. 역전파(출력층에서 입력층 방향으로 가중치와 편향을 업데이트하는 과정) 수행

cf.) 역전파 과정에서 인공 신경망은 경사 하강법을 사용

 

 

<기울기 소실 문제>

시그모이드 함수를 미분한 값은 적어도 0.25 이하의 값.

역전파 과정에서 0에 가까운 값이 누적해서 곱해지게 되면서, 앞단에는 기울기(미분값)가 잘 전달되지 않게 됨

⇒ 시그모이드 함수를 사용하는 은닉층의 개수가 다수가 될 경우에는 0에 가까운 기울기가 계속 곱해지면 앞단에서는 거의 기울기를 전파받을 수 없게 됨, 매개변수 W가 업데이트 되지 않아 학습이 되지X

결론: 시그모이드 함수의 은닉층에서의 사용은 지양됨, 시그모이드 함수는 주로 이진 분류를 위해 출력층에서 사용함

하이퍼볼릭탄젠트 함수

입력값을 -1과 1사이의 값으로 변환

 

시그모이드 함수와 같은 문제가 발생하나 하이퍼볼릭탄젠트 함수의 경우에는 시그모이드 함수와는 달리 0을 중심으로 하고 있으며 미분했을 때의 최대값은 1로 시그모이드 함수의 최대값인 0.25보다 큼

⇒ 시그모이드 함수에 비해 기울기 소실 증상이 적은 편

⇒ 은닉층에서 시그모이드 함수보다는 선호됨

렐루 함수

인공 신경망의 은닉층에서 가장 인기 있는 함수, f(x) = max(0, x)

 

음수를 입력하면 0을 출력, 양수를 입력하면 입력값을 그대로 반환 ⇒ 0 이상의 입력값의 경우에는 미분값이 항상 1.

어떤 연산이 필요한 것이 아니라 단순 임계값이므로 연산 속도도 빠름.

문제점: 입력값이 음수면 기울기(미분값)도 0이 됨⇒ 죽은 렐루

 

리키 렐루

죽은 렐루를 보완하기 위해 나온 렐루의 변형 함수 중 하나.

입력값이 음수일 경우에 0이 아니라 0.0001과 같은 매우 작은 수를 반환 ⇒ 기울기가 0이 되지 않아서 렐루는 죽지 않음

소프트맥스 함수

시그모이드 함수처럼 출력층에서 주로 사용됨.

시그모이드 함수 ⇒ 이진 분류에 사용

소프트맥스 함수 ⇒ 다중 클래스 분류에 사용

07-03 행렬곱으로 이해하는 신경망

순전파

입력층에서 출력층 방향으로 예측값의 연산이 진행되는 과정

행렬곱으로 순전파 이해하기

 

입력의 차원이 3, 출력의 차원이 2인 인공신경망이 존재.

케라스에서는 .summary()를 사용하면 해당 모델에 존재하는 모든 매개변수 (가중치 w와 편향 b의 개수)를 확인할 수 있음

이때 매개변수의 수가 8개라고 나옴

가중치 w의 개수가 w1, w2, w3, w4, w5, w6로 총 6개이며 편향 b의 개수가 b1, b2로 두 개이므로 총 학습가능한 매개변수의 수는 8개

행렬곱으로 병렬 연산 이해하기

4개의 샘플을 하나의 행렬 X로 정의하고 인공 신경망의 순전파를 행렬곱으로 표현

주의: 학습가능한 매개변수의 수는 여전히 8개!

배치연산: 인공 신경망이 다수의 샘플을 동시에 처리하는 것

행렬곱으로 다층 퍼셉트론의 순전파 이해하기

 

입력층 : 4개의 입력과 8개의 출력

은닉층1 : 8개의 입력과 8개의 출력

은닉층2 : 8개의 입력과 3개의 출력

출력층 : 3개의 입력과 3개의 출력

 

입력 행렬, 가중치 행렬, 편향 행렬, 출력 행렬은 다음과 같은 크기 관계를 가짐

순전파를 진행하고 예측값을 구하고나서 이 다음에 인공 신경망이 해야할 일은 예측값과 실제값으로부터 오차를 계산하고, 오차로부터 가중치와 편향을 업데이트하는 일

역전파: 순전파와는 반대 방향으로 연산을 진행하며 가중치를 업데이트

07-04 딥 러닝의 학습 방법

손실 함수

실제값과 예측값의 차이를 수치화해주는 함수.

오차⬆️ 손실 함수의 값⬆️, 오차⬇️ 손실 함수의 값⬇️

손실 함수의 값을 최소화하는 두 개의 매개변수인 가중치 w와 편향 b의 값을 찾는 것이 딥러닝의 학습과정.

 

(1). MSE

평균 제곱 오차는 연속형 변수를 예측할 때 사용되는 손실 함수 (선형 회귀 학습 시 나옴)

(2). 이진 크로스 엔트로피(이항 교차 엔트로피)

출력층에서 시그모이드 함수를 사용하는 이진 분류의 경우 사용

(3). 카테고리칼 크로스 엔트로피(범주형 교차 엔트로피)

출력층에서 소프트맥스 함수를 사용하는 다중 클래스 분류의 경우 사용

배치 크기에 따른 경사 하강법

손실 함수의 값을 줄여나가면서 학습하는 방법은 어떤 옵티마이저를 사용하느냐에 따라 달라짐

배치: 가중치 등의 매개 변수의 값을 조정하기 위해 사용하는 데이터의 양

 

(1). 배치 경사 하강법

가장 기본적인 경사 하강법으로 옵티마이저 중 하나로 오차를 구할 때 전체 데이터를 고려

1 에포크: 전체 데이터에 대한 한 번의 훈련 횟수

따라서 배치 경사 하강법은 한 번의 에포크에 모든 매개변수 업데이트를 단 한 번 수행

단점: 전체 데이터를 고려해서 학습하므로 시간이 오래 걸리며 메모리를 크게 요구

(2). 배치 크기가 1인 확률적 경사 하강법(SGD)

전체 데이터가 아닌 랜덤으로 선택한 하나의 데이터에 대해서만 계산

매개변수의 변경폭이 불안정하고, 때로는 정확도가 낮을 수도 있지만 하나의 데이터에 대해서만 메모리에 저장하므로 자원이 적은 컴퓨터에서도 쉽게 사용가능함

(3). 미니 배치 경사 하강법

배치 크기를 지정하여 해당 데이터 개수만큼에 대해서 계산하여 매개 변수의 값을 조정

장점: 전체 데이터를 계산하는 것보다 빠르며, SGD 보다 안정적

⇒ 가장 많이 사용되는 경사 하강법!

옵티마이저

(1). 모멘텀

관성을 응용한 방법

경사 하강법에서 계산된 접선의 기울기에 한 시점 전의 접선의 기울기 값을 일정한 비율만큼 반영

글로벌 미니멈이 아닌 특정 구역에서의 최소값인 로컬 미니멈에 도달하였을 때 모멘텀(관성의 힘)을 빌려서 로컬미니멈에서 탈출할 수 있음

(2). 아다그라드

매개변수들은 각자 의미하는 바가 다름, 모든 매개변수에 동일한 학습률을 적용하는 것은 비효율적

⇒ 아다그라드는 각 매개변수에 서로 다른 학습률을 적용시킴

⇒ 변화가 많은 매개변수는 학습률이 작게 설정, 변화가 적은 매개변수는 학습률을 높게 설정

(3). 알엠에스프롭

아다그라드는 학습을 계속 진행한 경우에는, 나중에 가서는 학습률이 지나치게 떨어진다는 단점이 존재 ⇒ 이를 개선한 것이 알엠에스프롭

(4). 아담

알엠에스프롭과 모멘텀 두 가지를 합친듯한 방법

방향과 학습률 두 가지를 모두 잡음

(5). 옵티마이저 인스턴스는 compile의 optimizer에서 호출함

에포크와 배치 크기와 이터레이션

학습: 기계는 실제값과 예측값의 오차로부터 옵티마이저를 통해서 가중치를 업데이트함

(1). 에포크

인공 신경망에서 전체 데이터에 대해서 순전파와 역전파가 끝난 상태를 말함

전체 데이터를 하나의 문제지에 비유한다면 문제지의 모든 문제를 끝까지 풀고, 정답지로 채점을 하여 문제지에 대한 공부를 한 번 끝낸 상태→ 에포크가 50이면 문제지를 50번 푼 셈

(2). 배치 크기

몇 개의 데이터 단위로 매개변수를 업데이트 하는지를 말함

문제지에서 몇 개씩 문제를 풀고나서 정답지를 확인하느냐의 문제.

cf.) 배치의 수: 에포크에서 배치 크기를 나눠준 값

(3). 이터레이션 또는 스텝

한 번의 에포크를 끝내기 위해서 필요한 배치의 수

한 번의 에포크 내에서 이루어지는 매개변수의 업데이트 횟수

07-05 역전파 이해하기

역전파

출력층에서 입력층 방향으로 계산하면서 가중치를 업데이트해감

07-06 과적합을 막는 방법들

모델이 과적합되면 훈련 데이터에 대한 정확도는 높을지라도 새로운 데이터 즉 검증 데이터나 테스트 데이터에 대해서는 제대로 동작하지 않음

 

  1. 데이터의 양 늘리기데이터의 양이 적을 경우, 해당 데이터의 특정 패턴이나 노이즈까지 쉽게 암기하게 되므로 과적합 현상이 발생할 확률이 늘어남ex.) 이미지의 경우, 데이터의 증식 사용→ 이미지를 돌리거나 노이즈 추가 또는 일부분 수정
  2. 텍스트 데이터의 경우, 데이터의 증강 사용→ 번역 후 재번역을 통해 새로운 데이터를 만들어냄(역번역)
  3. 데이터 증식 또는 증강: 의도적으로 기존의 데이터를 조금씩 변형하고 추가하여 데이터의 양을 늘림
  1. 모델의 복잡도 줄이기인공 신경망의 복잡도는 은닉층의 수나 매개변수의 수 등으로 결정됨
  2. 따라서 과적합 현상이 포착되었을 때 인공 신경망의 복잡도를 줄임
  1. 가중치 규제 적용하기과적합될 가능성: 복잡한 모델 > 간단한 모델(매개변수가 적은 모델)
    • L1 규제: 가중치 w들의 절대값 합계를 비용 함수에 추가
    • L2 규제: 모든 가중치 w들의 제곱합을 비용 함수에 추가, 어떤 특성들이 모델에 영향을 주고 있는지를 판단하고자 할 때 유용
  2. ⇒ 복잡한 모델을 간단하게 하는 방법(가중치 규제)
  1. 드롭아웃학습 과정에서 신경망의 일부를 사용하지 않는 방법

07-07 기울기 소실과 폭주

💡
기울기 소실: 역전파 과정에서 입력층으로 갈수록 기울기가 점차적으로 작아지는 현상이 발생할 수 있음 → 입력층에 가까운 층들에서 가중치들이 업데이트가 제대로 되지 않으면 결국 최적의 모델을 찾을 수 없게 됨
💡
기울기 폭주: 기울기가 점차 커지더니 가중치들이 비정상적으로 큰 값이 되면서 결국 발산

기울기 소실 또는 기울기 폭주를 막는 방법

  1. ReLU와 ReLU의 변형들을 은닉층의 활성화 함수로 사용하는 것
  1. 그래디언트 클리핑: 기울기 값을 자르는 것
  1. 가중치 초기화
    1. 세이비어 초기화(글로럿 초기화): 균등 분포 또는 정규 분포로 초기화→ 여러 층의 기울기 분산 사이에 균형을 맞춰서 특정 층이 너무 주목을 받거나 다른 층이 뒤쳐지는 것을 막음, 시그모이드 함수나 하이퍼볼릭 탄젠트 함수와 함께 사용 시 Good, 렐루함수와는 Bad
    1. He 초기화: 세이비어 초기화와 다르게 다음 층의 뉴런의 수를 반영하지 X, 렐루함수와 사용시 Good
  1. 배치 정규화: 인공 신경망의 각 층에 들어가는 입력을 평균과 분산으로 정규화하여 학습을 효율적으로 만듦, 배치 단위로 정규화하는 것
    1. 내부 공변량 변화: 층 별로 입력 데이터 분포가 달라지는 현상
    1. 한계
      1. 미니 배치 크기에 의존적
      1. RNN에 적용하기 어려움
  1. 층 정규화

07-08 케라스 훑어보기

전처리

Tokenizer(): 토큰화와 정수 인코딩

pad_sequence(): 모든 샘플의 길이를 동일하게 맞춤

워드 임베딩

단어를 밀집 벡터(임베딩 벡터)로 만드는 과정

Embedding(): 단어를 밀집 벡터로 만듦

모델링

Sequential(): 인공 신경망 챕터에서 입력층, 은닉층, 출력층과 같은 한 층을 구성하기 위해 사용

summary(): 모델의 정보를 요약해서 보여줌

컴파일과 훈련

compile(): 모델을 기계가 이해할 수 있도록 컴파일, 손실 함수와 옵티마이저, 메트릭 함수를 선택

fit(): 모델을 학습

평가와 예측

evaluate(): 테스트 데이터를 통해 학습한 모델에 대한 정확도를 평가

predict(): 임의의 입력에 대한 모델의 출력값을 확인

모델의 저장과 로드

모델의 저장: 학습이 끝난 신경망의 구조를 보존하고 계속해서 사용할 수 있다는 의미

save(): 인공 신경망 모델을 hdf5 파일에 저장

load_model(): 저장해둔 모델을 불러옴

07-09 케라스의 함수형 API

Sequential API는 여러층을 공유하거나 다양한 종류의 입력과 출력을 사용하는 등의 복잡한 모델을 만드는 일에는 한계가 존재.

⇒ 함수형 API 필요!

Sequential API로 만든 모델

단순히 층을 쌓는 방식으로 초심자에게 적합한 API이나 전문가가 되기위해서는 Functional API를 학습해야함

Functional API로 만든 모델

각 층을 일종의 함수로서 정의+각 함수를 조합하기 위한 연산자들을 제공

07-10 케라스 서브클래싱 API

언제 서브클래싱 API를 써야할까?

Functional API에서 구현할 수 없는 모델도 구현할 수 있음 → 밑바닥부터 새로운 수준의 아키텍처를 구현해야 하는 실험적 연구를 할 때

세 가지 구현 방식 비교

  Sequential API Functional API Subclassing API
장점 단순하게 층을 쌓는 방식 Sequential API보다 복잡한 모델 구현 가능 Functional API로도 구현할 수 없는 모델 구현 가능
단점 복잡한 모델 구현 불가능 입력의 크기를 명시한 입력층을 정의해줘야 함 객체 지향 프로그래밍에 익숙해야함(코드 사용 까다로움)

07-12 피드 포워드 신경망 언어 모델

기존 N-gram 언어 모델의 한계

n-gram 언어 모델은 언어 모델링에 바로 앞 n-1개의 단어를 참고⇒ 충분한 데이터를 관측하지 못하면 언어를 정확히 모델링하지 못하는 희소문제 발생

단어의 의미적 유사성

  • 기계가 단어의 의미적 유사성을 알 수 있다면 희소 문제 해결 가능!
  • 언어 모델 또한 단어의 의미적 유사성을 학습할 수 있도록 설계한다면, 훈련 코퍼스에 없는 단어 시퀀스에 대한 예측이라도 유사한 단어가 사용된 단어 시퀀스를 참고하여 보다 정확한 예측을 할 수 있음 ⇒ NNLM
  • 단어 벡터 간 유사도를 구할 수 있는 벡터를 얻어냄 ⇒ 워드 임베딩

피드 포워드 신경망 언어 모델(NNLM)

윈도우: NNLM 모델에서 다음 단어를 예측할 때, 정해진 개수의 단어만을 참고하는데 해당 범위를 뜻함

투사층: 일반 은닉층과 다르게 가중치 행렬과의 곱셈은 이루어지지만 활성화 함수가 존재하지 않음

룩업 테이블: i번째 인덱스에 1이라는 값을 가지고 그 외의 0의 값을 가지는 원-핫 벡터와 가중치 W행렬의 곱은 W행렬의 i번째 행을 그대로 읽어오는 것과 같음

임베딩 벡터: 테이블 룩업 과정을 거친 후의 단어벡터들은 초기에는 랜덤한 값을 가지지만 학습 과정에서 값이 계속 변경 되는데 이러한 단어 벡터를 의미함

벡터의 연결 연산: 벡터들을 이어붙이는 것을 의미

NNLM에서 은닉층을 지난다: 은닉층의 입력은 가중치 곱해진 후 편향이 더해져 활성화 함수의 입력이 된다는 의미

 

출력층에서는 활성화 함수로 소프트맥스(softmax) 함수를 사용하는데, V차원의 벡터는 소프트맥스 함수를 지나면서 벡터의 각 원소는 0과 1사이의 실수값을 가지며 총 합은 1이 되는 상태로 바뀜. 이 벡터를 NNLM의 예측값이라는 의미에서 y^라고 함

벡터y^의 각 차원 안에서의 값이 의미하는 것: y^의 j번째 인덱스가 가진 0과 1사이의 값은 j번째 단어가 다음 단어일 확률

NNLM의 이점과 한계

  1. (이점) 기존 모델에서의 개선점: 희소 문제 해결
  1. (한계) 고정된 길이의 입력(Fixed-length input): NNLM은 n-gram 언어 모델과 마찬가지로 다음 단어를 예측하기 위해 모든 이전 단어를 참고하는 것이 아니라 정해진 n개의 단어만을 참고할 수 있음