codingeverybody / codingyahac

https://coding.yah.ac
292 stars 50 forks source link

rnn lstm 쉽게 설명해주실분 계신가여 #978

Open midori11111 opened 4 years ago

midori11111 commented 4 years ago

중1 학생입니다 mlp cnn 요런건 중1수학실력으로도 어거지로 이해 했지만 rnn이랑 lstm은 많은 동영상과 구글링을 해봐도 이해하기 쉽지가 않네요 쉽게 이해시켜주실분 계신가여

RayleighKim commented 4 years ago

비유는 오해를 불러일으킬 수 있습니다, 하지만.... 쉽게 말해보려면 아래처럼 말해볼 수도 있을 것 같습니다.

RNN은 아래와 같이 동작할 수 있습니다. 최대한 단순하게만 설명해보겠습니다.

사람1, 사람2, 사람3, 사람4, 사람5, 사람6, 사람7 이 순서대로 서있습니다.

사람1은 해리포터 1권을 읽습니다. --> 사람2에게 내용을 요약해줍니다.

사람2는 해리포터 2권을 읽습니다. 또한 사람1에게 해리포터 1권 내용을 들었습니다. --> 사람3에게, 사람1에게 들은 내용과 해리포터 2권 내용을 한꺼번에 요약해줍니다.

...

사람 5는 해리포터 5권을 읽습니다. 또한 사람4에게서, 해리포터 4권내용과 사람3의 이야기를 요약한 내용을 들었습니다. --> 사람6에게 사람4에게 들은 내용과 해리포터 5권 내용을 한꺼번에 요약해줍니다.

...

사람 7은 사람6에게서 들은내용과 해리포터7권을 종합하여. 해리포터가 재밌다 / 재미없다를 판단하는데 도움을 줄 정보를 말합니다.

chongkong commented 4 years ago

ㅎㅎㅎ 재미있는 비유네요. 저는 좀더 구체적인 설명을 드려보고자.

중1이면 함수를 배우셨나요? f(x) = x + 1 이라고 정의된 함수가 있으면 이 친구는 입력을 받고 1을 더한걸 출력하는 함수입니다. 꼭 입력이 하나일 필요는 없죠. f(x, y) = x + y 라고 정의된 함수를 생각할수도 있는데 이건 덧셈이랑 똑같이 생긴 함수죠?

수학의 관점에서 보자면 뉴럴넷은 여러 숫자를 받아서 여러 숫자를 내보내는 함수 f 입니다. 여러 숫자를 직접 다 나열하기는 귀찮으니까 f(1, 2, 3) 대신 f(x) 와 같이 씁니다.

뉴럴넷이라고 말하는 함수는 사실 엄청 단순하게 생긴 함수라 입력값에서 거의 곱셈과 덧셈만 합니다. 입력과 출력이 여러 숫자라는걸 기억하세요. 예를들어서 f(x, y) = (3x + y, x - y) 라는 함수도 뉴럴넷이라고 할 수 있죠. 그런데 뉴럴넷이 특별한점은 함수의 내용이 조금씩 바뀔수 있다는 겁니다. 3x + y 대신 2.9x + 1.1y 와 같이 조금씩 가중치를 변경해나가는거죠. 그래서 뉴럴넷에서는 입력보다도 사실 저 가중치가 더 중요합니다. 저게 "학습"의 증거거든요. 이 가중치를 parameter 라고 합니다.

다시 MLP, CNN, RNN으로 돌아와보자면 보통 MLP나 CNN같은 경우는 입력이 한 번 주어지는 경우 (예를 들어 이미지) 하나의 입력에 대한 출력을 생성하는게 목적입니다.

y = f(x)
y = f(사진)   (y는 예를 들면 사진 분류의 결과)

반대로 RNN은 입력이 여러번 주어질 때 (예를 들어 비디오는 사진의 연속이고, 텍스트는 단어들의 연속이죠) 사용되는 함수에요. 특별한 점은 이 과정에서 이전 함수의 중간 출력값을 같이 사용합니다. (위 예시에서 해리포터 요약해주는 단계죠)

x1 = "I", x2 = "Love", x3 = "You"
(h1, y1) = f(x1,   )
(h2, y2) = f(x2, h1)
(h3, y3) = f(X3, h2)

입력 x1, x2, x3 과 각 입력에 대한 출력 y1, y2, y3 뿐만 아니라 중간 결과 h1, h2, h3 이 있고 이 값들이 다음 입력과 함께 사용됩니다. 이 중간값들은 함수가 현재 입력 x3 뿐만 아니라 이전 입력 (x1, x2) 에 대한 정보도 중간결과 h2를 통해 "요약"된 형태로 받아볼 수 있게 합니다.

이런 모양때문에 RNN은 보통 다음과 같은 그림으로 표현됩니다.

보통 우리가 관심을 가지는 것은 출력값들, 그중에서도 마지막 출력값인 y3인데요, 예를 들어 주어진 텍스트가 좋은말을 하는건지 나쁜말을 하는건지 판단하는 sentiment analysis 문제에서는 y3 값을 가지고 분류를 합니다.