래빗 챌린지 - 심층 학습 Day3 Section2 LSTM

0. 개요



본 기사는 일본 딥 러닝 협회 인정의 강좌 프로그램인 「래빗 챌린지」가 제공하고 있는 과목의 하나인 심층 학습의 리포트이다.
기사 타이틀에 기재된 바와 같이, Day3 Section2 LSTM에 대해서 이하에 정리한다.

1. LSTM(Long Short Term Memory)



RNN에서는 시계열을 과거로 거슬러 올라갈수록 기울기가 사라진다.
활성화 함수나 가중치 등의 초기화의 수법을 바꾸는 것도 억제하는 방법의 하나이지만, 뉴럴 네트워크의 구조를 바꾸어 해결한 것이 LSTM.

아래의 사이트에 있는 것 같은 그림에서 보면 흐름을 알기 쉽다.

참고 : htps : // 사암 f. 하테나 bぉg. 코 m / 엔 try / 2019/06/04/225239 # 3 - LSTM

1.1. CEC



과거 데이터를 저장하는 부분.

CEC 단독으로는 다음과 같은 문제가 있기 때문에 게이트, 들여다 보면 결합으로 해결한다.

시간 의존도에 관계없이 가중치가 일률 (가중치 충돌)이되어 버리는 문제
과거의 정보를 모두 가지고 있기 때문에, 그 정보가 필요 없어져도 계속 영향을 미치는 문제
CEC 자신의 값은 게이트의 제어에 영향을 주지 않기 때문에 CEC의 과거의 정보를 임의의 타이밍으로 전파시키거나 망각시키거나 할 수 없는 문제.

1.2. 입력 게이트



이전 단위의 입력을 얼마나 받을지(일률이 아니라 가변의 가중치로 한다)를 조정한다.
i=\sigma(W_{i}h_{t-1}+U_{i}x_{t})

1.3. 출력 게이트



1 이전 유닛의 입출력을 어느 정도 받는지(일률이 아니라 가변의 가중치로 한다)를 조정한다.
o=\sigma(W_{o}h_{t-1}+U_{o}x_{t})

1.4. 망각 게이트



CEC의 내용을 어느 정도 남기는지(필요하지 않은 정보를 망각한다)를 조정한다.
f=\sigma(W_{f}h_{t-1}+U_{f}x_{t})

1.5. 메모리 셀


g=tanh(W_{g}h_{t-1}+U_{g}x_{t})
c_{t}=(c_{t-1}\otimes f)\oplus(g\otimes i)

1.6. 출력


h_{t}=tanh(c_{t})\otimes o

1.7. 엿보기 결합



CEC 자체의 값에 가중치 행렬을 통해 전파 가능하게 한 구조.

2. 확인 테스트



2.1. 확인 테스트 1



시그모이드 함수를 미분했을 때 입력값이 0일 때 최대값을 취한다.
그 가치는 몇 가지.

답변:
시그모이드 함수의 미분
f'(x)=(1-f(x))・f(x)

시그모이드 함수의 입력값 $x$에 0을 대입하면
sigmoid(x)=\frac{1}{1+e^{-x}}=\frac{1}{2}=0.5

미분의 공식에 적용하면
f'(x)=(1-0.5)・0.5=0.25

2.2. 확인 테스트 2



다음 문장을 LSTM에 입력하고 공란에 해당하는 단어를 예측하고 싶습니다.
문장의 「매우」라는 말은 공란의 예측에 있어서 없어져도 영향을 미치지 않는다고 생각된다.
이 경우 어떤 게이트가 작동하는지 생각할 수 있습니까?

"영화 재미있었어요. 그런데 너무 배고파서 뭔가 ____."

답변: 망각 게이트

3. 연습 챌린지



3.1. 클리핑



그라디언트의 규범이 임계 값을 초과하는 경우, 그라디언트의 놈을 임계 값을로 정규화하여 그라디언트 폭발을 방지하는 방법.
def gradient_clipping(grad, threshould):
  norm = np.linalg.norm(grad)
  rate = threshould / norm

  if rate < 1:
    return grad * rate
  return grad

3.2. LSTM


def lstm(x, prev_h, prev_c, W, U, b):
  # セルへの入力やゲートをまとめて計算し、分割
  lstm_in = _activation(x.dot(W.T)) + prev_h.dot(U.T) + b)
  a, i, f, o = np.hsplit(lstm_in, 4)

  # 値を変換、セルへの入力:(-1, 1)、ゲート:(0, 1)
  a = np.tanh(a)
  input_gate = _sigmoid(i)
  forget_gate = _sigmoid(f)
  output_gate = _sigmoid(o)

  # セルの状態を更新し、中間層の出力を計算
  c = input_gate * a + forget_gate * c
  h = output_gate * np.tanh(c)
  return c, h

X. 래빗 챌린지란?



래빗 챌린지란, 일본 딥 러닝 협회 인정의 강좌 프로그램의 하나.
E 자격을 수험하기 위해서는 이 래빗 챌린지 등, 어느 하나의 강좌 프로그램을 수료해야 한다.

래빗 챌린지의 특징은 "현장에서 파괴가 효과가 있는 딥 러닝 강좌"의 통학 강좌 녹화 비디오를 편집한 교재를 사용한 자습 스타일이라는 점.
서포트는 다른 강좌보다 적고, 수신이 아니라 자주적으로 배워가는 자세가 아니면 진행되지 않지만, 그만큼, 다른 강좌에 비하면 저렴하고, 손이 내기 쉽다.
어느 정도 지식이 있는 사람, 자력으로 노력한다고 하는 녀석이 있는 사람 전용이 아닐까 느낀다.

좋은 웹페이지 즐겨찾기