ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [cs231n] 10강 순환 신경망 (Recurrent Neural Network) (4/4, LSTM)
    AI 2021. 4. 13. 17:48

    지금까지 우리는 이 단일 순환 망 계층에 대해서 얘기했는데, 하나의 숨겨진 상태 (hidden state)만 있는 거죠. 앞으로 꽤 자주 보게 될 또하나는 이 다층 순환망 (multi-layer recurrent network) 아이디어입니다. 여기서 이건 3계층 순환 신경망인데, 입력이 들어가고 일련의 숨겨진 상태가 첫번째 신경망 계층으로부터 만들어 집니다. 그리고 이제, 하나의 순환 신경망 계층을 실행시키고 나면, 이런 숨겨진 상태의 전체 순열을 가지게 됩니다. 그리고 그 숨겨진 상태의 순열을 다른 순환 신경망 계층의 입력 순열로 사용할 수 있습니다. 그럼 두번째 RNN계층으로부터 또다른 숨겨진 상태의 순열을 만들어 내는 것을 생각해 볼 수 있죠. 그리고 이런 것들을 서로서로 쌓아올리는 것을 생각할 수 있죠. 왜냐면 다른 문맥에서도 더 깊은 모델이 다양한 문제에 대해서 더 잘 동작하는 것을 보고 알았으니까요. RNN에서도 똑같이 유효합니다. 많은 문제에 대해서, 둘 혹은 셋 계층의 순환신경망 모델이 꽤 흔하게 사용된다는 것을 보게 될 겁니다. RNN에서는 슈퍼 깊은 모델은 일빈적으로 보이지 않을 겁니다. 그래서 보통, 2, 3, 4 계층 RNN들이 아마도 일반적으로 사용할 만큼 깊을 겁니다.

    그다음 이런걸 생각해 보는 것도 매우 재미있고 중요하다고 생각하는데요. 이런 RNN이 어떤 문제에 대해서 사용될 수 있는지를 봤죠. 그러나 그것들을 훈련시킬 때 이 모델들에게 정확히 무슨 일이 벌어지는지 좀 더 자세히 생각해 볼 필요가 있습니다. 여기 여태까지 이야기 했던 이 작은 바닐라 RNN 셀 (cell)을 그렸는데요. 여기서 현재 입력 x_t와 이전 숨겨진 상태 h_t-1를 받아 들입니다. 그것들은 2개의 벡터들 (vectors)이죠. 그래서 그것들을 같이 쌓을 수 있습니다. 그리고 나서 가중치 행렬과 이 행렬 곱셉을 하고 출력을 tanh를 통과시키면 다음 숨겨진 상태를 줍니다. 그것이 이 바닐라 (vanilla) 순환 신경망의 기본적인 함수 형태죠. 그러나 우리는 경사를 계산하려고 할 때 역방향 전달동안 이 아키텍처에 무슨 일이 벌어지는지 생각해 볼 필요가 있죠.

    계산하려고 하는 것을 생각하면, 역방향 전달 동안, 우리는 h_t에 관한 손실 (loss)의 미분을 얻을 겁니다. 그리고 셀을 통한 역방향 전달 동안, 우리는 h_t-1에 대한 손실의 경사를 계산해야 할 겁니다. 우리가 이 역방향 전달을 계산할 때, 우리는 경사가 이 빨간 경로를 통과하면 거꾸로 흐른다는 것을 알 수 있습니다. 먼저, 그 경사는 이 tanh 게이트 (gate)를 통과해서 거꾸로 흐를 겁니다. 그다음 이 행렬 곱셈 게이트를 통과해서 거꾸로 흐를겁니다. 이 행렬 곱셈 게이트를 통과해서 역전파할 때, 결국은 저 가중치 행렬의 전치 행렬 (transposed matrix)로 곱하게 됩니다. 그 얘기는 우리가 이 바닐라 RNN 셀들 중 하나를 통과해서 역전파를 할 때마다, 결국 가중치 행렬의 어떤 부분을 곱하게 된다는 의미죠.

    우리가 이 순환 신경망 셀들 여러 개를 순차적으로 쌓는 것을 생각해 보죠. 왜냐면 이건 RNN이니까요. 우리는 모델 순열들 (sequences)을 원하죠. 이제 일련의 이 계층들을 통과하는 경사 흐름에 무슨 일이 벌어지는 지를 생각해 보면, 어떤 수상한 일이 벌어집니다. 왜냐면, h_0에 대한 손실의 경사를 계산할 때, 우리는 이 모든 RNN셀들의 각각을 통과하며 역전파해야 합니다. 하나의 셀을 통과하며 역전파할 때마다, 이 W의 전치 행렬의 인수 중 하나를 꺼낼 겁니다. 그건 h _0에 대한 경사에 대한 최종 표현이 이 가중치 행렬의 많고 많은 인수들을 포함하게 될 것이라는 것을 의미하고, 그건 나쁘다고 할 수 있죠. 행렬의 경우가 아니라 배수 (scaler) 경우를 생각해 보죠. 만약 어떤 배수를 가지고 그 같은 숫자를 계속 반복해서 곱하면, 4개의 예제에 대해서가 아니라 백 혹은 수백 시점 (time step)에 대해서, 같은 숫자를 계속 곱하는 것은 정말 나쁜 일이죠. 배수의 경우에, 그 숫자가 1보다 크면 그것은 폭발해 버릴 거고, 1보다 작으면 그건 0을 향해 가며 없어지겠죠. 절대값에 있어서 말입니다. 이것이 일어나지 않는 유일한 방법은 그 숫자가 정확히 1이되는 거죠. 실제에선 사실상 아주 드물죠.

    그와 같은 직관이 행렬까지 연장됩니다. 그러나 이제 배수 숫자의 절대값보다는 그대신 이 가중치 행렬의 가징 큰 단일 값을 봐야할 필요가 있습니다. 만약 그 가장 큰 단일 값이 1보다 크다면, 역방향 전달 동안 우리가 가중치 행렬을 계속해서 곱할때, h_0에 대한 경사가 아주 아주 커질 겁니다. 가중치 행렬이 너무 커지는 때이죠. 그리고 그걸 우리는 폭발하는 경사 문제 (exploding gradient problem)라고 부릅니다. 이제 이 경사는 우리가 역전파해 가는 시점의 숫자 만큼 깊이에 있어서 지수적으로 폭발할 것입니다. 그리고 만약 가장 큰 단일 값이 1보다 작으면, 우리는 반대 문제를 갖게 되죠. 우리의 경사는 줄어 들고 줄어 들고 지수적으로 줄어들죠. 우리가 역전파하면서 이 가중치 행렬의 인수를 점점 더 많이 꺼낼 수록 말입니다. 그걸 사라지는 경사 문제 (vanishing gradient problem)라고 부릅니다.

    사람들이 이 폭발하는 경사 문제를 해결하기 위한 가끔 하는 해킹이 있는데, 경사 잘라내기 (gradient clipping)라고 부릅니다. 이건 이런 간단한 체험적인 (heuristic)건데요. 경사를 계산한 다음, 만약 그것의 L2 놈 (norm)이 어떤 임계값을 넘으면, 그걸 커지지 못하게 고정해서, 이 최대 임계값을 가지도록 하는 겁니다. 이건 끔찍한 해킹이지만, 실제에서 순환 신경망을 훈련시킬때 꽤 많이 사용되고 있죠. 그리고 상대적으로 이런 폭발하는 경사 문제를 공격하는데 유용한 도구입니다.

    이제 사라지는 경사 문제에 대해서는, 일반적으로는 더 복잡한 RNN 아키텍처로 옮겨갈 필요가 있습니다.

    그것이 이 LSTM의 아이디어에 동기부여를 합니다. LSTM은 Long Short Term Memory의 약자죠. 이건 이런 순환 신경망을 위한 약간 더 멋진 순환 관계입니다. 이건 정말로 이런 경사가 사라지거나 폭발하는 문제를 덜어주기 위해서 설계되었습니다. 그것에 대해서 해킹하기 보다는, 더 나은 경사 흐름 특성을 가지도록 아키텍처를 설계한 겁니다. 강의 처음에 봤던 더 멋진 CNN 아키텍처에 비유할 수 있겠죠. 한가지 더 얘기하고 싶은 것은 LSTM 셀이 사실 1997년에 나왔다는 겁니다. 이 LSTM 아이디어는 꽤 오랬동안 있었다는 거죠. 이 사람들은 이런 아이디어 들에해서 90년대에 연구했고, 절대적으로 시대에 앞서 있었죠. 왜냐면 이 모델들은 20년 뒤인 지금 모든 곳에서 사용된다고 할 수 있으니까요. LSTM은 이런 웃긴 함수 형태를 가지고 있죠. 기억해보면, 이 바닐라 순환 신경망을 가지고 있을 때, 그건 이 숨겨진 상태를 가지고 있었죠. 그리고 이 순환 관계를 사용해서 매 시점마다 숨겨진 상태를 업데이트 (update)하려고 했습니다. LSTM에서는, 우리는 2개의 숨겨진 상태를 매 시점마다 유지합니다. 하나는 이 h_t인데, 숨겨진 상태라고 부르고, 바닐라 RNN에서 가지고 있던 숨겨진 상태에 비유할 수 있겠죠. 그러나 LSTM은 또한 두번째 벡터 c_t를 유지하는데, 셀 상태 (cell state)라고 부릅니다. 그리고 이 셀 상태는 이 벡터인데, 일종의 내부의 즉, LSTM내에 있는 것이고, 사실 세상밖으로 노출되지 않습니다. 그리고 이 업데이트 방정식을 통해서, 2개의 입력을 받고, 그것으로 이 4개의 게이트 (gate)를 계산하는데, i, f, o, g라고 부릅니다. 그 게이트들을 사용해서 셀 상태를 업데이트하죠. 그다음 우리는 다음 시점에 셀 상태의 일부를 숨겨진 상태로 노출합니다.

    이건 약간 웃긴 함수 형태인데, 저는 두장의 슬라이드를 통해서 왜 우리가 이 아키텍처를 사용하고 왜 이것이 말이 되는지에 대해 보겠습니다. 특히 경사가 사라지거나 폭발하는 문맥에서 말이죠. LSTM에서 첫번째로 우리는 이 이전 숨겨진 상태 h_t와 현재 입력 벡터 x_t를 받습니다. 바닐라 RNN 처럼요. 바닐라 RNN에서, 기억해 보면, 우리는 그 2개의 입력 벡터를 받아서 둘을 합치죠. 그 다음 행렬 곱셉을 해서 바로 RNN에서 다음 숨겨진 상태를 계산하죠. 이제 LSTM은 약간 다른 것을 합니다. 우리는 이전 숨겨진 상태와 현재 입력을 받아서 그것들을 쌓고, 매우 큰 가중치 행렬 W를 곱해서 4개의 다른 게이트를 계산합니다. 이것들은 모두 숨겨진 상태와 같은 크기를 가집니다. 가끔 여러분은 이게 다른 방식으로 적힌 것을 볼텐데요. 어떤 저자들은 각 게이트마다 다른 가중치 행렬을 적을 겁니다. 어떤 저자들은 그것들을 모두 조합해서 하나의 커다란 가중치 행렬로 만들죠. 그러나 그건 사실 모두 같은 것입니다. 이 아이디어는 숨겨진 상태와 현재 입력을 받아서 이 4개의 게이트를 계산하는데 사용한다는 겁니다. 이 4개의 계이트는 i, f, o, g로 쓰는 것을 자주 볼 텐데요. ifog라고 하면 그것들이 뭔지 외우기 쉽죠. i는 입력 게이트죠. 그건 우리가 얼마나 많이 우리의 셀에 입력하고 싶은지를 말해 줍니다. f는 잊기 (forget) 게이트인데, 이전 시점으로부터 얼마나 많이 셀 메모리를 잊을 건지를 얘기합니다. o는 출력 게이트라서, 얼마나 많이 우리가 외부 세상에 우리를 노출하고 싶은 지를 나타내죠. g는 사실 좋은 이름이 없죠. 그래서 저는 그걸 게이트 게이트라고 부릅니다. g는 얼마나 많이 우리의 입력 셀에다가 쓰고 싶은지를 말해 줍니다. 이 4개의 게이트 각각은 다른 비선형성을 사용한다는 것을 눈치챘을 겁니다. 입력, 잊기 그리고 출력 게이트는 모두 시그모이드 (sigmoid)를 사용하죠. 그것들의 값이 0과 1사이가 될 거라는 걸 의미합니다. 반면에 게이트 게이트는 tanh를 사용하니까, 출력이 -1부터 1사이가 될 거라는 것을 의미하죠. 이것들은 좀 이상하지만, 그것들을 바이너리 (binary) 값으로 생각해 보면, 조금 더 이해가 되죠. 이 두 값들의 극단에서 어떤 일이 벌어지는지를요. 이 게이트들을 계산한 다음, 이 다음 방정식을 보면, 우리의 이전 시점으로부터의 셀 상태가 원소 마다 잊기 게이트로 곱해진다는 것을 알 수 있습니다. 이 잊기 게이트를 0과 1의 벡터라고 생각해 보면, 그건 셀 상태의 각각의 항목에 대해서, 만약 잊기 게이트가 0이라면, 우리가 그 셀의 그 원소를 잊고 싶다고 얘기하고 있는 겁니다. 혹은 그 잊기 게이트가 1이라면, 우리가 그 셀의 그 원소를 기억하고 싶다는 것을 얘기하는 거죠. 일단 잊기 게이트를 사용해서 셀 상태의 일부를 막으면, 우리는 두번째 항을 가지고 되는데, 그건 i와 g를 원소 단위로 곱한 거죠. i는 0과 1의 벡터죠. 왜냐면, 시그모이드로부터 나오니까요. i가 1인 경우에 그건 셀 상태의 각 원소에 대해서 쓰고 싶다는 것을 얘기하죠. 혹은 i가 0인 경우에 이 시점에서 우리가 그 셀 상태의 그 원소에 대해서 쓰고 싶지 않다는 걸 얘기하는 거죠. 게이트 게이트는, tanh로부터 나오니까, 0이거나 -1일겁니다. 그것이 우리가 이 시점에서 셀 상태의 각 원소에 쓰고 싶은 후보 값이죠. 만약 셀 상태 방정식을 보면, 매 시점마다, 셀 상태는 이런 종류의 다른, 독립적인 배수 값을 가지고 있고, 그것들은 모두 1씩 증가하거나 줄어듭니다. 그래서 셀 상태 안에서, 우리는 이전 상태를 기억하거나 잊을 수 있고, 그 다음 매 시점마다 셀 상태의 원소들을 1까지 증가시키거나 감소시킬 수 있습니다. 이 셀 상태의 원소들을 매 시점마다 증가하거나 감소할 수 있는 작은 배율 정수 카운터로 생각할 수 있습니다. 이제, 우리의 셀 상태를 계산하고 난 다음, 우리는 업데이트 된 셀 상태를 사용해서 숨겨진 상태를 계산할 거고, 그것을 바깥 세상에 노출 시킬 겁니다. 그래서 이 셀 상태가 이런 카운터로 해석되기 때문에, 매 시점마다 1혹은 -1만큼 센다고 할수 있죠. 그래서 우리는 저 카운터 값을 tanh를 사용하여 적당한 0에서 1까지의 범위로 집어 넣습니다. 그리고 이제, 원소단위로 이 출력 게이트로 곱합니다. 그리고 출력 게이트는 또 시그모이드로부터 나오니까, 그건 대부분 0과 1이라고 생각할 수 있죠. 그리고 출력 게이트는 셀 상태의 각 원소에 대해서 얘기해 주죠. 이 시점에 대해서 외부의 숨겨진 상태를 계산할 때 우리의 셀 상태의 저 원소를 드러내고 싶은지 드러내고 싶지 않은지를요.

    그리고 사람들이 LSTM을 설명하려고 할 때 어떤 전통이 있는 것 같은데요. 모든 사람이 그들 자신만의 혼동을 일으킬 수 있는 LSTM 다이어그램 (diagram)을 생각해 낼 필요가 있다는 거죠. 여기에 제 것이 있습니다. 여기서 우리는 LSTM 셀 안에서 무슨 일이 벌어지는지 알 수 있죠. 우리는 왼쪽의 이전 셀 상태에서 입력을 받고 이전의 숨겨진 상태를 받아들이죠. 뿐만 아니라 현재 입력 x_t도 받아들입니다. 현재 입력 뿐만 아니라 이전 숨겨진 상태를 받아 들여서 그것들을 쌓고 이 가중치 행렬 W로 곱해서 4개의 게이트를 만들어 냅니다. 여기서 비선형성을 생략했습니다. 이전 슬라이드에서 봤으니까요. 이제 잊기 게이트는 원소 단위로 (element-wise) 셀 상태와 곱합니다. 입력과 게이트 게이트는 원소 단위로 곱해지고 셀 상태에 더해지죠. 그러면 다음 셀이 됩니다. 다음 셀은 tahn로 들어가고, 원소단위로 이 출력 게이트와 곱해져서 다음 숨겨진 상태를 만들어 냅니다.

    이제 이 그림이 있으면, 역방향 전달 동안 우리는 LSTM 셀에 어떤 일이 벌어지는지 생각해 볼 수 있죠. 바닐라 순환 신경망 문맥에서, 역방향 전달 동안 우리가 계속해서 가중치 행렬 W로 곱하는 부분에서 나쁜 일들이 몇 가지 발생하는 것을 봤죠.

    그러나 이제, LSTM에서 상황은 좀 달라 보입니다. 이런 셀 상태의 경사를 계산하는 역방향의 경로를 생각해 보면, 우리는 꽤 좋은 그림을 얻게 되죠. 우리가 셀로부터 오는 업스트림 (upstream) 경사를 가질 때, 이 더하기 연산을 통과하는 역전파를 하면, 기억하듯이 이 더하기는 업스트림 경사를 2개의 가지로 복사하죠. 그래서 업스트림 경사가 복사되어서 이 원소 단위 곱하기를 통해 역전파 됩니다. 그 다음 업스트림 경사는 결국 원소 단위로 잊기 게이트로 곱해지죠. 이 셀 상태를 통해서 역전파를 하면, 업스트림 셀 상태 경사는 결국 잊기 게이트로 원소단위로 곱해지게 된다는 것 뿐이죠. 이건 실제로 두가지 이유로 바닐라 RNN보다 훨씬 더 좋습니다. 하나는 이 잊기 게이트가 이제는 원소 단위 곱하기라는 겁니다. 전체 행렬 곱하기가 아니라요. 원소 마다의 곱하기가 전체 행렬 곱하기 보다는 약간 더 낫죠. 두번째는 원소마다의 곱셈은 잠재적으로 매 시점마다 다른 잊기 게이트로 곱한다는 겁니다. 기억해 보면, 바닐라 RNN에서는, 우리가 계속해서 같은 가중치 행렬로 반복해서 곱하고 있었죠. 그건 매우 명백하게 이런 폭발하는 경사나 사라지는 경사로 귀결됩니다. 그러나 이제 LSTM의 경우는, 이 잊기 게이트가 매 시점마다 달라질 수 있는 겁니다. 이제, 모델이 이런 폭발하고 사라지는 경사의 문제를 피하기 훨씬 쉬워진거죠. 마지막으로, 이 잊기 게이트가 시그모이드로부터 나오기때문에, 이 원소 단위 곱셉이 0과 1사이에 있는 것이 확실하죠. 다시 얘기하지만, 이건 더 좋은 숫자적 특성 (numerical properties)이죠. 여러분이 이것들을 반복적으로 곱한다는 것을 생각해 본다면 말입니다. 또 주목할 점은 바닐라 순환 신경망 문맥에서는, 역방향 전달 동안, 우리의 경사는 매 시점마다 tanh를 통과하며 흐르고 있었습니다. 그러나 LSTM에서는, 숨겨진 상태가 출력 y_t를 계산하는데 사용되죠. 최종 숨겨진 상태에서 첫번째 셀 상태로 역전파하는 것을 생각해 보면, 그 역방향 경로를 통과하면서, 우리는 단일 tanh 비선형성을 통과하며 역전파 할 뿐이죠. 매 시점마다 별도의 tanh를 통과하는 게 아니구요.

    그래서 이 모든 것들을 다같이 모아보면, 셀 상태를 통과하여 역전파하는 이 역방향 전달이 경사의 슈퍼 고속도로가 된다는 것을 알 수 있죠. 그건, 경사가 비교적 방해받지 않고 모델의 제일 끝의 손실로부터 모델의 시작점의 초기 셀 상태까지 쭉 지나가게 해주는 거죠.

    LSTM은 사실 레즈넷 (ResNet)과 꽤 비슷해 보인다는 것을 알 수 있죠. 중복 망에서, 우리는 이 망을 통과하며 거꾸로 가는 항등 연결 (identity connection)의 경로가 있었고, 그것이 레즈넷에서 경사가 거꾸로 흐를 수 있는 경사 슈퍼 고속도로를 주었죠. 그것이 일종의 LSTM에서의 같은 직관입니다. 여기서도 이런 더하기와 셀 상태의 원소 단위 곱하기 상호작용이 LSTM에서 셀 상태를 통해 경사가 거꾸로 흐르게 하는 비슷한 경사 슈퍼 고속도로를 제공하죠.

    그런데 고속도로 망 (highway networks)이라고 불리는 좋은 논문이 있습니다. 그건 이 LSTM 셀과 이런 중복 망의 중간쯤에 있는 것이죠. 이 이런 고속도로 망들은 사실 중복 망 이전에 나왔고, 그것들은 이런 아이디어를 가지고 있습니다. 고속도로 망의 각 계층에서, 우리는 일종의 후보 활성들 (candidate activations)을 계산할 거고, 뿐만 아니라 게이팅 함수 (gating function)도 계산할겁니다. 이 게이팅 함수는 그 계층에서의 이전 입력과 합성곱 같은 것을 통과해 나온 후보 활성 사이에 끼워들어간 것이죠. 사실상 이것들 사이에는 많은 아키텍처상의 유사점들이 있고 사람들은 매우 깊은 CNN들과 매우 깊은 RNN들을 훈련시키는 것으로부터 많은 영감을 얻고 여기서 많은 크로스오버 (crossover)가 있죠.

    매우 간단히 말하면, 세상에는 많은 종류의 순환 신경망 아키텍처의 변형이 있습니다. LSTM을 제외하고는 가장 흔한 것이 이 GRU일텐데, 게이트가 있는 순환 단위 (gated recurrent unit)라고 부르는 것이죠. 여기보면 저런 업데이트 방정식들이 있죠, 그건 LSTM과 많은 유사한 특징들이 있는데, 그건 이런 곱하기의 원소 단위 게이트들을 이런 더하기 상호작용과 같이 사용해서 사라지는 경사 문제를 해결하려고 했죠. 또한 이런 멋진 논문이 있는데, LSTM: a search based oddysey라는 겁니다. 매우 독창적인 제목이죠. 여기서는 그들은 LSTM 방정식을 가지고 이것저것 해보려고 했고 한 지점에서는 비선형성을 바꾸려고 했죠. 예를 들면, 출력 게이트를 노출시키는데 진짜 tanh가 필요할까? 같은 이런 비선형성에 대한 그리고 LSTM 업데이트 방정식의 그 조각들에 대한 많은 종류의 질문에 답하려고 했죠. 모델을 바꾸고 LSTM 방정식을 약간 변경하면 어떻게 될까에 대한 답들이죠. 결론은 이렇게 나왔다고 볼 수 있죠. 그것들은 모두 거의 동일하게 동작합니다. 그것들중 일부는 다른 것들 보다 하나의 문제나 혹은 다른 문제에 대해 더 잘 동작하죠. 그러나 일반적으로 아무것도, 그들이 시도한 LSTM의 어떤 변경도 모든 문제들에 대해 의미있게 원래의 LSTM보다 더 낫지 않았습니다. 그래서 LSTM업데이트 방정식은 약간 마법처럼 보이지만 어쨌든 유용하다는 신념을 가질 수 있는 거죠. 여러분이 만나는 문제에 대해서 아마도 그것들을 사용해야 할 겁니다. 또한 구글에서 몇 년전 나온 이 멋진 논문도 있는데요. 여기서 그들은 진화하는 탐색을 했고 매우 큰 숫자의 임의의 RNN 아키텍처들에 대해서 했죠. 그들은 임의로 이런 업데이트 방정식을 바꿔가면서 더하기와 곱하기, 게이트와 비선형성을 다양한 조합으로 넣어봤죠.그들은 이걸 거대한 구글의 클러스터 (cluster)에 쏟아 붇고 다양한 특성에 대해 많은 이런 다양한 가중치 업데이트를 시도해 봤습니다. 그런데 또 같은 결과 나온 거죠. 그들은 이미 있는 GRU나 LSTM 셀보다 의미있게 더 나은 것을 찾지 못했습니다. 비록 특정 문제들에 대해서 약간 더 낫거나 약간더 안 좋은 어떤 변형들이 있긴 했지만요. 기억해야 할 점들은 아마 이런 것들일텐데, LSTM이나 GRU를 사용할때, 이 방정식들에 마법이 많이 있는 것은 아니지만, 경사의 흐름을 이런 더하기 연결과 이런 곱합기 게이트로 적절히 관리하는 아이디어가 슈퍼 유용하다는 겁니다.

    요약하면, RNN은 슈퍼 멋지죠. 그것으로 여러분은 수많은 새로운 종류의 문제들을 공격할 수 있습니다. 그것들은 가끔 경사가 사라지는 문제나 폭발하는 문제가 있을 수 있죠. 그러나 우리는 그것을 가중치 잘라내기나 더 멋진 아키텍처들로 해결할 수 있죠. 그리고 CNN 아키텍처와 RNN아키텍처에는 멋진 겹치는 부분들이 있죠.

    댓글

Designed by Tistory.