본문 바로가기

Deep Learning/Hands On Machine Learning34

15.4 긴 시퀀스 다루기 *RNN의 문제점은 긴 sequence를 처리할 때 잘 작동하지 않는다는 점이다. 이유는 아래 두 가지가 있다. 1) gradient vanishing problem, gradient exploding problem 2) 입력의 첫 부분에 대한 정보를 기억하지 못하는 문제 15.4.1 불안정한 그레디언트 문제와 싸우기 * RNN에서도 역시 가중치 초기화, optimizer, dropout 등을 사용하여 불안정한 gradient를 조절할 수 있다. * 하지만, ReLU와 같이 수렴하지 않는 활성화 함수의 경우 큰 도움이 되지 않는다. RNN의 경우 DNN과 달리 한 층에서 뉴런은 여러 time step에 걸쳐 동일한 가중치를 사용하게 된다. 만약, gradient descent를 통해 첫 번째 time s.. 2021. 11. 21.
15.2 RNN 훈련하기 BPTT(Backpropagation through time) * time step으로 네트워크를 펼치고 보통의 역전파를 사용함으로서 RNN을 훈련시키는 방법을 뜻한다. 하지만 RNN 클래스에서는 이러한 펼치는 작업을 따로 하지는 않는다. 다만 역전파 설명을 돕기 위해 펼쳐놓았다고 표현하는 것이다. * 일반적인 Backpropagation 과정과 동일하게 정방향 계산을 통해서 도출한 output으로 cost함수를 계산하고, 이를 다시 역방향 계산하여 가중치를 update시키는 방식을 동일하게 사용한다. * 위와 같이 $Y_0, Y_1$을 무시하고 일부 output들만 cost 계산에 사용할 수 있다. output 반영 여부는 network마다 다를 것이다. 예를 들어 sequence to vector n.. 2021. 11. 21.
15.1 순환 뉴런과 순환 층 순환 뉴런 * 위 그림의 왼쪽 뉴런 한 개로 구성된 모형은 가장 간단한 RNN 모형이다. 이를 시간 축으로 표현하면 오른쪽 그림과 같이 표현할 수 있다. * 각 time step t 마다 이 순환 뉴런은 이번 step에 입력으로 들어오는 $x_t$와 이전 step의 출력인 $y_{t-1}$을 입력으로 받습니다. * 첫 번째 time step에서는 이전 step의 출력이 없으므로 $y_{t-1}$을 일반적으로 0으로 설정합니다. 순환 뉴런으로 된 층 * 각 순환 뉴런은 입력 $x_t$를 위한 가중치 하나, 출력 $y_{t-1}$를 위한 가중치 하나 총 2개의 가중치 벡터 $w_x, w_y$를 가진다. 이를 순환 층 전체로 확장하면 가중치 행렬 $W_x, W_y$라고 볼 수 있다. * 하나의 sample에 .. 2021. 11. 21.
13.3 입력 특성 전처리 데이터 전처리 방법 1) numpy, pandas 등을 통해 데이터를 사용하기 전에 전처리 2) 데이터 API로 데이터를 적재할 때 동적으로 전처리 3) 전처리층을 직접 모델에 포함시킴 이 중에 세 번째 방법 : 전처리층을 직접 모델에 포함시키는 법을 알아보겠다. means=np.mean(X_train, axis=0, keepdims=True) stds=np.std(X_train, axis=0, keepdims=True) eps=keras.backend.epsilon() model=keras.models.Sequential([ keras.layers.Lambda(lambda inpusts: (inputs - means) / (stds + eps)), ... ]) keras의 sequential모델을 생성.. 2021. 11. 12.