wikibook / tf2

《시작하세요! 텐서플로 2.0 프로그래밍》 예제 코드
https://wikibook.co.kr/tf2/
48 stars 46 forks source link

7.3 긍정, 부정 감성 분석 질문 2개 #12

Closed 1920039 closed 4 years ago

1920039 commented 4 years ago

안녕하세요. 책을 정성스럽게 써주셔서 잘 읽고 있습니다.

책 p.214에 LSTM이 과적합된 이유를 '임베딩 레이어를 랜덤한 값에서부터 시작해서 학습시키기 때문에 각 단어를 나타내는 벡터의 품질이 좋지 않아서'라고 하셨는데, 그 뜻이 정확히 이해되지 않습니다. 또 '이를 개선하기 위한 방법으로 임베딩 레이어를 별도로 학습시켜서'라고 하셨는데, 이것은 어떤 의미인가요?

다음 책 p.212에 'sparse는 정답인 Y가 희소 행렬일 때 사용한다'고 하시면서 sparse_categorical-crossentropy를 사용하셨는데, 해당 건에서는 Y가 0과 1 밖에 없어서 categorical_crossentropy에 해당하지 않나요?

greentec commented 4 years ago

안녕하세요. 책을 읽어주시고 좋은 질문을 해주셔서 감사드립니다. 질문주신 부분에 대한 답변을 드립니다.

  1. 214쪽
    • 여기서 임베딩 레이어는 20,000개의 단어를 300차원의 벡터로 표현하기 위한 레이어입니다. 그림 7.13에서 보실 수 있는 것처럼 임베딩 레이어에는 랜덤한 값이 들어가게 되며 여기서 하나의 row에 해당되는 벡터가 하나의 단어를 표현하게 됩니다. pic_7_13 (그림 7.13)

예제 7.27의 학습에서 임베딩 레이어의 가중치는 랜덤한 값으로 초기화된 상태에서 LSTM레이어와 Dense레이어의 가중치와 마찬가지로 정답을 맞추기 위해 좀 더 나은 값으로 학습됩니다. 그런데 이때 학습 네트워크가 감성 분석을 위한 상황에만 맞춰져 있고 학습 단어의 수가 20,000개로 적기 때문에 임베딩 레이어는 각 단어를 표현하기 위한 좀 더 좋은 표현을 배우지 못하고 과적합되는 것입니다. 같은 20,000개의 단어와 300차원의 벡터를 사용한다고 해도 KoBERT처럼 5천 4백만개~2억 7천만개의 단어를 학습한 뒤 그 중 본문의 긍정/부정 감성 분석에 필요한 20,000개의 단어를 뽑아서 사용한다면 단어를 표현하는 벡터의 품질이 달라질 것입니다. 임베딩 레이어의 벡터 품질을 측정하는 방법에 대해서는 이 논문에서 비슷한 단어의 벡터 유사도 평가, 유비 추론(analogy) 등이 나와 있으니 참고해보시면 좋을 것 같습니다.

  1. 212쪽
    • 예제 7.21에 출력되는 정답의 형태를 보시면 [[0], [1], [0], [0], [1]]로 정답의 인덱스만 표시하고 있습니다. 이것은 희소행렬의 특징으로 행렬을 모두 나타내는 것이 아니라 원-핫에 해당하는 인덱스만 표시하는 것입니다. 만약 정답의 형태가 [[1,0], [0,1], [1,0], [1,0], [0,1]]이었다면 말씀주신대로 sparse_categorical_crossentropy가 아니라 categorical_crossentropy를 사용해야 할 것입니다.

추가로 궁금하신 점이 있으면 말씀 부탁드립니다. 감사합니다.

1920039 commented 4 years ago

1. 임베딩 레이어를 만들기 위해 저렇게까지 엄청난 규모로 사전학습을 시키는군요. 제가 보고 있는 다른 책에서는 학습 단어의 수를 1,000개만 쓰고 있어서 20,000개도 매우 많다고 생각했습니다(1,000개의 경우는 val_accuracy가 잘 안나오기는 합니다)

2. 'sparse matrix'와 'sparse_categorical_crossentropy'라는 표현이 혼동을 일으키는 것 같습니다. 교재 p.134에 따르면 [0,0,0,0,0,0,0,0,1]은 대부분의 값이 0인 sparse matrix인데, 이는 메모리 낭비가 있어서 그 대신 '9'를 그냥 쓸 수 있는 sparse_categorical_crossentropy를 쓴다고 되어 있습니다. 즉, sparse matrix의 낭비를 막기 위해 'non-sparse matrix(dense matrix?)'를 사용하는 경우의 crossentropy가sparse_categorical_crossentropy라고 이해해야 하나 봅니다

친절하게 설명해 주셔서 감사합니다!

greentec commented 4 years ago

네, 그렇습니다. 참고로 2에서 예를 들어주신 [0,0,0,0,0,0,0,0,1]은 원소의 수가 9개이기 때문에 sparse matrix로 나타내면 [8]이 됩니다. 감사합니다.