[핸즈온 머신러닝 2판] 15장 정리

juyeon·2022년 10월 24일
0

핸즈온 머신러닝 2판

목록 보기
13/14
post-custom-banner
  • 출처
  • 되도록이면 책의 내용과 코드를 그대로 옮기기 보다는 요약과 보충설명!

읽기전에

개념 정리

padding='causal'

: 시계열에서는, 또는 인과적인 추론을 할 때는!! 뒷부분을 학습하면 안되니까..!

15장. RNN과 CNN을 사용해 시퀀스 처리하기

1. 순환 뉴런과 순환 층

  • feedforward 신경망 vs 순환 신경망
    : 입력층 -> 출력층 한 방향으로만 흐름 vs 순환
  • 하나의 샘플에 대한 순환층의 출력
    : 활성화 함수 * (x의 가중치 * t타임의 입력x + y의가중치 * t-1타임의 출력y + 편향)

1) 메모리 셀

  • t 타임의 출력에는 t-1 타임 까지의 모든 입력에 대한 함수가 포함됨 = 즉 일종의 메모리
  • 타임 t-1에서 t로 넘어가는(즉 t-1의 출력이 t로 입력되는) 부분에는 메모리 셀 h가 존재

2) 입력과 출력 시퀀스

  • sequence-to-sequence network: 입력 -> 출력
  • sequence-to-vector network: 입력 -> 마지막만 출력
  • vector-to-sequence network: 첫번째만 입력 -> 출력
  • encoder-decoder 모델: encoder(sequence-to-vector network) 뒤에 decoder(vector-to-sequence network) 연결

2. RNN 훈련하기

  • 역전파를 이용 = BPTT(Backpropagation through time)
  • 절차
    1 정방향 패스가 펼쳐진 네트워크를 통과
    2 비용함수를 사용하여 출력 시퀀스 평가
    3 비용 함수의 gradient가 펼쳐진 네트워크를 따라 역방향으로 전파
    4 모델 파라미터 업데이트

3. 시계열 예측하기

  • 시계열로 예측(forecasting)과 값 대체(imputation)
  • 시계열의 입력 특성: [배치 크기, 타임 스텝 수, 차원 수]

기준 성능

  • 각 시계열의 마지막 값을 그대로 예측하기 -> ?? 질문

간단한 RNN 구현하기

  • 순환 신경망은 입력 시퀀스의 길이 지정이 불필요 <- 타임 스텝의 길이 제한이 없음

* 트렌드와 계절성

  • 트렌드와 계절성을 삭제한 후 마지막에 더해준다

심층 RNN

: 셀을 여러 층으로 쌓음

  • SimpleRNN 주의할 점
    • 모든 순환 층에서 return_sequences=True로 설정해야함
      : 타임 스텝마다 출력을 반환
      : 그래야 그 다음 순환층이 3D 형태로 시퀀스를 받음
    • acivation 을 다른 활성화 함수로 지정할 수는 있지만(기본은 tanh), 잘 동작하지 않음
      -> 그래서 출력층을 Dense로 사용하는 경우가 많음

여러 타임 스텝 앞을 예측하기

  1. 바로 다음 값 예측 -> 다시 입력으로 -> 다시 예측..반복
  • 단점: 오차가 누적됨. 성능 별로.
  1. RNN 훈련하여 한꺼번에 여러 타임 예측하기
  • 개선: 시퀀스-투-시퀀스로, 각 타임스텝마다 최종 예측값의 개수를 예측하도록 하자.
    • return_sequences=True로 설정
    • TimeDistributed layer

4. 긴 시퀀스 다루기

  • 문제점: 기울기 소실과 폭주, 긴 훈련시간, 불안정한 훈련, long-term dependency 문제

불안정한 그레이디언트 문제와 싸우기

  • DNN(심층 신경망)에서 사용한 좋은 가중치 초기화, 빠른 옵티마이저, 드롭아웃 등 사용하기
  • 수렴하지 않는 활성화 함수(ex. ReLU)는 오히려 RNN을 불안정하게 만든다
    • 이유: 활성화 함수가 수렴하지 않을 경우 경사 하강법이 폭주할 경우를 막지 못한다.
  • 배치 정규화(BatchNormalization)는 효과가 미미하다.
    • 순환층 안보다 순환층 사이에 적용했을 때 쪼금 낫긴 하지만..그다지?
  • 대신 층 정규화(layer normalization) 사용하기
    : 배치 차원이 아닌 특성 차원에 대해 정규화

단기 기억 문제 해결하기

LSTM(Long Short-Term Memory) 셀

  • forget gate(필요없는건 버리고), input gate(중요한 입력을 인식), output gate
    : 잊을건 잊고, 기억할건 기억하자
  • RNN의 hidden state에 cell state를 추가

핍홀 연결

: LSTM의 변종

  • 이전 장기 기억 상태가 forget gate와 input gate의 제어기에 입력으로 추가됨
  • 현재의 장기 기억 상태는 output gate의 제어기에 입력으로 추가됨

GRU(Gated Recurrent Unit) 셀

: LSTM의 간소화 버전

  • 두 상태 벡터 -> 한개로 합쳐짐
  • 하나의 게이트 제어기가 forget과 input gate를 모두 제어
  • output gate가 없음

1D 합성곱 층(CNN)을 사용해 시퀀스 처리하기

-> 이해가 잘 안됨 ㅠ

WAVENET

  • 층마다 (각 뉴런의 입력이 떨어져 있는 간격인) 팽창 비율(dilation rate)를 두배로 늘리는 1D 합성곱(CNN) 층을 쌓음
  • 층이 높아질수록 보는 타임 스텝의 개수를 늘려가면서 하위 층은 단기 패턴을, 상위 층은 장기 패턴을 학습
    -> 뒷부분은 잘 이해 못함 ㅠ 다시보자

궁금증

  1. 606쪽. 기준 성능의 가장 간단한 예시로 각 시계열의 마지막 값을 그대로 예측하기를 들었는데, 일종의 validation 처럼 쓴다는 걸까요?
    :

  2. 607쪽. 트렌드와 계절성을 삭제한 후 마지막에 더해준다의 의미는 무엇인가요?

  3. 609쪽. 4번째 줄 "이 RNN은 한 타임 스텝에서 다음 타임 스텝으로 필요한 모든 정보를 나르기 위해 다른 순환 층의 은닉 상태를 주로 사용" 문장에서 '다른 순환 층의 은닉 상태'란 타임 스텝간의 메모리 셀을 의미하는걸까요?
    : 맞음

  4. 612쪽. TimeDistributed layer의 작동과정이 잘 이해되지 않습니다.
    4-2. 그냥 역전파랑 뭐가 다른거지??⭐

  1. 615쪽. 층 정규화와 배치 정규화의 차이점을 설명하고 있습니다. 배치 정규화는 훈련과 테스트 셋에서 동일한 방식으로 작동하지 않는건가요? 그렇다면 어떤 문제가 생기는걸까요?
  • 배치 정규화든 층 정규화든 훈련과 테스트셋에서 동일하게 작동. 다만 층 정규화는 독립적으로 샘플의 타임스텝마다 통계 계산이 가능, 배치 정규화는 배치 사이즈마다 정규화.
  • 층 정규화는 '특성' 차원에 대해 정규화하니까..좋은데...?
  • RNN에 배치 정규화를 사용하는 것은 어려움. 왜냐면, RNN은 각 시점(time step)마다 다른 통계치를 가집니다.
    https://daje0601.tistory.com/306
  1. 622쪽. '1D 합성곱 층(CNN)을 사용해 시퀀스 처리하기' 이해하기.

  2. 624쪽. 'WAVENET' 이해하기.

profile
내 인생의 주연
post-custom-banner

0개의 댓글