새로운 유형의 인공신경망인 오토 인코더란 무엇인지 알아보자!

오토인코더(Autoencoder)

  • 입력층과 출력층의 크기가 같은 형태(기본적인 형태)
  • Encoder, Decoder로 나눠짐
  • Latent Variables 기준으로 왼쪽을 보면 변수를 통해 특징이 추려지면서 중요한 값들로 압축이 됨 = Encoder
  • 압축된 정보를 펼쳐서 원래 입력층과 유사한 값을 만들어냄 = Decoder

 

오토 인코더 특징

  • 비지도 학습(unsupervised learning) : 실제 값이 없을 때 할 수 있는 학습 방법
    • 지도 학습에서는 input값이 hidden state를 통해서 output이 나오는데, 이 output값을 실제 y값과 비교하여 Loss 값을 추출함
    • 지도학습에서는 y값이 반드시 필요함
  • 차원 축소 가능
    • Encoder 부분을 보면 차원 축소를 할 수 있음
    • PCA, clustering, Autoencoder를 통해서 차원 축소 가능
  • 추가적인 이미지 생성 가능
    • 이미지 뿐만 아니라 추가적인 변수 생성 가능
    • 데이터가 모자를 경우에 오토인코더를 사용해서 데이터를 늘릴 수 있음
  • 일반적으로 대칭 구조를 지님
    • Encoder 부분과 Decoder 부분

 

학습 방법

  • MSE를 사용해서 X값과 X' 값의 차이를 Loss function으로 정의해 줌
  • y 값이 없기 때문에 y에 대한 지도학습 방법은 아님
  • X와 X'의 차이가 작은 파라미터 값들을 업데이트 시켜줌
  • 가중치 매트릭스 A, B, C, D
  • A = 5 * 7
  • B = 3 * 5
  • C = 5 * 3
  • D = 7 * 5
  • 업데이트해야 할 변수의 개수 = 35 + 15 + 15 + 35 = 100
  • 변수를 줄여주기 위해 C = B𝑇 , D = A𝑇  로 사용하는 경우도 있음 -> 이럴 경우 A와 B만 업데이트해도 C와 D도 업데이트됨
  • 그래서 업데이트할 변수가 100개에서 50개로 줄어듦

 

오토 인코더의 종류

  1. Stacked Autoencoder(기본구조 - 여러 개의 은닉층 존재)
    • 단점 : X와 X'로 Loss function을 정의해서 Loss를 작게 하는 가중치를 업데이트해줘야 하는데 Loss를 작게 해 주도록 업데이트하다 보면 X와 X'가 같은 값이 나올 수 있음 -> 그럼 Autoencoder를 사용하는 의미가 없음, 입력층의 값을 사용하지 왜 출력층의 값을 사용하니?
    • Loss가 작아진다는 의미는? X와 X'가 같아야 한다는 소리
    • 우리는 X라는 속성을 가진 X'를 얻고 싶은 것임
    • 가깝지만 똑같지는 않고, 매우 유사한 X'를 얻고 싶음
  2. Denoising Autoencoder
    • X라는 속성을 가진 X'를 얻고 싶어서 나온 것
    • Autoencoder를 할 때 입력층 바로 다음에 노이즈를 주입함
    • X에 대한 계산이 아닌 X + ε를 계산함
    • 또는 입력층 바로 다음에 드랍아웃이라는 것을 사용해서 랜덤 한 일부 노드를 없애고 진행함
  3. Sparse Autoencoder
    • X와 X'가 같게 나오면 모델이 의미가 없기 때문에 나옴
    • X와 X'를 유사하게 만들기 위해 Loss function에  제약조건을 줘서 한없이 작아지지는 않게 함
    • h = f(x), X' = g(h) => X' = g(f(x))
  4. Convolutional Autoencoder
    • 말 그대로 CNN이 적용된 것
    • Encoder와 Decoder는 모두 Convolutional Layer 형태로 채널들이 여러 개 있음
    • h는 Convolutional 형태나 Linear 형태로 할 수 있음
    • 1열 형태의 Layer를 사용하는 것이 아닌 Convolutional Layer를 사용하는 것

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

순환 신경망의 다양한 형태들을 알아보쟈

Vanilla RNN

  • 이전 hidden state 정보를 받아서 현재 input 값과 계산을 한 뒤에, Tanh라는 activation function을 거쳐서 현재의 hidden statef를 만들어냄
  • 이와 같은 방식을 사용하다 보면 '기울기 사라짐' 문제가 발생함

 

Vanilla RNN의 문제점

  • '기울기 사라짐' 문제는 값이 조금만 커지거나 조금만 작아져도 미분 값이 0이 돼버리는 것
  • '장기 의존성' 문제는 앞쪽의 hidden state 정보들이 뒷 쪽에 있는 hidden state까지 얼마나 전달이 될까? 라는 의문에서 생겨난 문제

 

LSTM(Long Short-Term Memory models)

  • RNN의 '기울기 사라짐' 문제와 '장기 의존성' 문제를 보완하기 위해 나온 모델
  • h값 만 받는 것이 아닌 s라는 gate를 만들어서 문제를 해결함
  • 이전 정보를 얼마나 기억할지, 현재 정보를 얼마나 기억할지 구조를 만든 것
  • 이전 정보가 덜 중요하다 싶으면 조금만 기억하고, 이전 정보가 중요한 것이면 많이 기억하는 식으로 동작함
  • f : forget gate, i : input gate, o : output gate
  • sell state, hidden state를 가지고 다음 계산에 반영시킴
  • 장점 : 기존 RNN보다 좋은 성능을 가짐
  • 단점 : 오래 걸림
  • sigmoid : 항상 0과 1 사이의 값을 가져옴

 

GRU(Gated Recurrent Unit)

  • LSTM 계산이 너무 복잡하니까, 계산을 줄여보자 해서 나온 모델
  • r(t)가 0에 가까우면 이전 내용을 거의 반영하지 않겠다는 의미
  • r(t)가 1에 가까우면 이전 내용을 많이 반영하겠다는 의미
  • 다음으로 넘겨줄 h(t)를 만들 때는, 이전 정보를 살려서 더해주는 형태
  • u(t)가 0에 가까우면 이전 정보는 조금, 현재 정보는 많이 반영하겠다는 의미
  • u(t)가 1에 가까우면 이전 정보를 많이, 현재 정보를 조금 반영하겠다는 의미

 

RNN, LSTM, GRU의 근본적인 단점

  • many to many 번역 문제에서
  • 기본적인 RNN 형태에서는 출력 길이를 조절할 수는 있지만 들어오는 문장마다 가변적일 수는 없음
  • 순서를 고려하기 쉽지 않음
  • 이런 문제를 해결하기 위해 seq2seq(sequence-to-sequence)가 나옴

 

seq2seq(sequence-to-sequence)

  • LSTM 모델 두 개를 붙임
  • 앞에 붙은 LSTM 모델을 Encoder라고 하고, 뒤에 붙은 LSTM 모델을 Decoder라고 함
  • 입력 값에 대해 LSTM 모델을 통해서 분석을 한 뒤 거기에 대표되는 Context vector를 하나 만듦
  • Context vector 정보를 뒤에 붙은 LSTM 모델로 보내서 처리함
  • 이렇게 처리하기 때문에 input sequence의 개수와 output sequence의 개수가 달라도 상관없어짐(출력 길이에 구애받지 않음)
  • context vector를 받아서 처리하기 때문에 input vector의 순서가 중요하지 않음
  • 단점 : 어순을 판단하기 어려움

 

Attention Mechanism

  • seq2seq의 어순을 판단하기 어려운 문제점을 해결하기 위해 나옴
  • 어순 차이를 극복함
  • RNN 연산을 할 때 연산된 각각의 hidden state를 가지고 각각에 가중치를 구해서 hidden state각각에 가중치를 곱해서 더한 값을 context vector로 넘겨줌
  • RNN의 고질적인 문제는 현재 정보가 과거의 정보에 영향을 미치지 않는다는 것
  • 한 단어 한단어가 번역될 때마다 전체적인 문장에서 가중치를 구함으로서 어순과 상관없이 전체적인 문장을 고려할 수 있음

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

저녁 운동도 부셨으니, 순환 신경망을 공부해보쟈

 

순환 신경망의 활용 - 시계열 데이터에 많이 사용됨

  1. 언어 번역
  2. 신호 처리
  3. 주가 예측
  4. 음성 인식

 

일반적인 인공신경망

  • input 하나가 모델로 들어오게 되면, 모델이 예측 값을 하나 산출
  • 각각의 input 마다 output을 산출

 

순환 신경망

  • input x1이 들어가면 output y1을 산출하는데, 모델에 정보 h1를 저장함
  • 두 번째 input  x2가 들어가면 모델에 저장한 정보 h1과 같이 계산을 해서 output y2를 산출함

 

RNN(Recurrent Neural Network)

  1. one to many - x가 들어가서 여러 개의 output을 만드는 것
    • 예를 들어, 작곡 프로그램의 경우 장르가 들어오면 여러 개의 음정을 뽑아냄
  2. many to one - 여러개의 데이터를 가지고 하나의 ouput을 산출함
    • 예를 들어, 주가 예측을 하는 경우, 12/1, 12/2, 12/3, 12/4 일의 데이터가 들어갔을 때
    • 12/1의 데이터와 h1(정보)을 이용해서 h2를 만들고
    • 12/2의 데이터와 h2를 이용해서 h3를 만드는 형식으로 감
    • h1, h2, h3, h4와 같은 hidden layer를 sequence라고 부르며, sequence의 길이를 자유롭게 조절할 수 있음
    • 주가 예측할 때, 10일 치를 볼지, 100일 치를 볼지 조절하는 것이 sequence 길이 조정이라고 보면 됨
  3. many to mant - 여러 개의 input과 여러 개의 output을 만듦
    • [i][don't][like][pizza] -> one hot encoding으로 변경하여 넣어줌

 

Vanilla RNN

  • 일반적으로 h0 은 영 벡터(0,0,0,...,0,0)로 정의함 
  • h => 이전에 있던 hidden state 정보와 현재의 정보를 받아서 현재의 상태를 저장
  • o => linear한 인공신경망
  • y => 인공신경망에 softmax를 씌워서 output 산출

 

  • h함수는 위 이미지처럼 동작함
  • 이전 state인 h(t-1)을 받아서 x(t)와 만나서 연산이 된 것이 a(t)
  • a(t)가 activate function인 Tanh를 거쳐서 h(t)를 만듦
  • many to many이면 x(t)를 받으면 y^(y_hat)을 만들고
  • 그게 아니면 h(t)를 다음으로 넘겨주면 됨

 

RNN의 손실 함수

  • Cross-Entropy : classification 문제에서 많이 사용됨
  • MSE : Regression 문제에서 많이 사용됨
  • Loss가 가장 작게 나오는 가중치를 구해주면 됨
  • 가중치 : W, U, V, c

 

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

+ Recent posts