[NLP] CS224N 17강 정리 [ConvNets and TreeRNNs]
1. 합성곱 신경망 (CNN) for NLP
1) CNN의 기본 개념
- 합성곱 신경망(CNN)은 본래 이미지 처리(Computer Vision) 분야를 위해 개발된 딥러닝 모델이야. 이미지 내에서 객체의 위치가 다소 변하더라도 동일한 특징을 인식할 수 있는 변환 불변성(translation invariant) 특징을 추출하는 데 매우 효과적이지.
- NLP에서는 텍스트를 일종의 1차원 이미지로 간주하고 CNN을 적용해. 문장을 구성하는 단어들의 시퀀스에 필터(filter) 또는 커널(kernel)이라 불리는 작은 행렬을 슬라이딩(sliding)시키면서 특정 패턴이나 특징을 잡아내는 방식이야.

2) NLP를 위한 CNN의 작동 방식
- 필터 적용: 문장에서 연속된 단어 묶음인 n-그램(n-gram) 단위의 특징을 추출하기 위해 다양한 크기의 필터를 사용해. 예를 들어, 2x5 필터는 한 번에 2개의 단어(바이그램)를, 3x5 필터는 3개의 단어(트라이그램)를 보며 특징을 추출하지. 각 필터는 특정 단어 조합이나 문법적 패턴이 나타날 때 높은 점수(활성화 값)를 출력하도록 학습돼.
- 패딩(Padding): 필터를 적용하면 출력의 크기가 입력보다 작아지는데, 이를 방지하고 입력과 출력의 길이를 동일하게 유지하기 위해 문장의 양 끝에 가상의 값(주로 0)을 채워 넣는 패딩 기법을 사용할 수 있어.
- 풀링(Pooling): 필터를 통해 얻은 여러 특징 값들 중에서 핵심적인 값만 선택하여 전체적인 문맥을 요약하는 과정이야.
- Max Pooling: 각 필터가 문장 전체를 훑고 난 결과(feature map)에서 가장 큰 값 하나만을 선택해. 이는 특정 n-그램 특징이 문장의 '어느 위치에 있든' 가장 강력하게 나타났는지를 감지하는 역할을 해. "이 영화 정말 최악이야" 라는 문장에서 '최악'이라는 단어에 강하게 반응하는 필터가 있다면, Max Pooling은 그 강한 부정적 신호를 포착하게 되지.
- Average Pooling: 필터 결과값들의 평균을 취하는 방식으로, 문장 전체의 전반적인 톤이나 품질을 측정하는 데 사용될 수 있어. 하지만 대부분의 텍스트 분류 문제에서는 특정 키워드를 포착하는 Max Pooling이 더 효과적인 성능을 보여.
- Dilated Convolution: 필터가 인접한 단어뿐만 아니라, 몇 칸씩 건너뛴 단어들을 함께 보도록 만들어 더 넓은 범위의 문맥을 파악하는 기법이야. 예를 들어, "나는 오늘 학교에 가서 공부를 했다"에서 '나', '학교', '공부'와 같이 핵심적인 단어들의 관계를 파악하는 데 도움을 줄 수 있어.





3) CNN 모델 적용 사례




- Yoon Kim의 CNN (2014): 텍스트 분류, 특히 감성 분석을 위해 제안된 매우 유명하고 영향력 있는 모델이야.
- 구조: 바이그램, 트라이그램, 포그램 등 다양한 크기의 필터를 동시에 사용하여 여러 n-그램 특징을 추출하고, 각 필터의 결과에 Max Pooling을 적용하여 고정된 크기의 특징 벡터를 만들어. 마지막으로 이 벡터들을 하나로 합쳐 소프트맥스 분류기를 통과시키는 간단하지만 강력한 구조를 가지고 있어.
- 핵심 아이디어: 사전 학습된 Word2Vec 같은 단어 벡터를 사용하는 데 있어 두 가지 전략을 사용했어. 하나는 모델 학습 과정에서 단어 벡터가 미세 조정(fine-tuning)되도록 허용한 채널, 다른 하나는 단어 벡터를 고정(static)시킨 채널이야. 이는 학습 데이터에 없는 단어의 의미 관계가 손상되는 것을 방지하면서도, 당면한 과제에 맞게 단어 의미를 최적화하는 효과를 동시에 얻기 위함이었지.
- 성능: 이 모델은 비교적 단순한 구조임에도 불구하고, 당시 여러 텍스트 분류 벤치마크에서 최고의 성능을 기록하며 CNN이 NLP 분야에서 매우 효과적임을 입증했어.





- VDCNN (Very Deep CNN, 2017): 이미지 분야의 VGGNet처럼, CNN을 매우 깊게(최대 29개 층) 쌓아 텍스트 분류를 수행한 모델이야.
- 특징: 단어 수준이 아닌 문자 수준(character level)에서 연산을 시작해. 이는 오타나 미등록 단어(OOV) 문제에 더 강인한 모델을 만들 수 있게 해줘. 원시 문자를 16차원 벡터로 변환한 후, 여러 개의 합성곱 블록을 통과시키며 특징을 추출해.
- 구조: 합성곱 블록, 지역 풀링(Local Pooling), 그리고 깊은 신경망의 학습을 돕는 잔여 연결(Residual Connections)을 활용하여 매우 깊은 네트워크를 효과적으로 학습시켰어.




2. 트리 재귀 신경망 (TreeRNN)

1) TreeRNN의 핵심 철학: 문장의 '구조'를 계산하다
- TreeRNN의 가장 핵심적인 철학은 "문장의 의미는 단어의 의미와 그 단어들이 결합되는 '구조'로부터 나온다"는 것이야. 이를 구성성의 원리(Principle of Compositionality)라고 불러.
Bag-of-Words 같은 초기 모델과 달리, "개가 사람을 물었다"와 "사람이 개를 물었다"처럼 단어의 구조가 의미를 완전히 바꾸는 현상을 모델링하기 위해 문장의 구문 분석 트리(Parse Tree)를 신경망의 '뼈대'로 사용해.
- 즉, 모델의 계산 방식 자체가 문장의 문법적 구조를 그대로 따라가도록 설계된 것이지. 이는 마치 레고 조립 설명서(구문 트리)를 따라 블록(단어 벡터)들을 조립하며 최종 완성품(문장 벡터)을 만드는 과정과 같아.


2) TreeRNN의 작동 원리 (수학적 관점)
- TreeRNN이 두 자식 노드(단어 또는 구)로부터 부모 노드(상위 구)의 의미를 계산하는 수학적 원리는 다음과 같아.
- 가장 기본적인 Standard TreeRNN에서 두 자식 노드 벡터 c1과 c2가 있을 때, 부모 노드 벡터 p는 이렇게 계산돼.
p=tanh(W[c1;c2]+b)
- 여기서 [c1;c2]는 두 자식 벡터를 그냥 길게 이어 붙인 것이고, W는 이 둘을 어떻게 조합할지를 학습하는 가중치 행렬이야. 이 W 행렬은 트리의 모든 노드에서 공유되기 때문에, 모델은 '두 요소를 합쳐 새로운 의미를 만드는 보편적인 규칙' 하나를 학습하게 되는 셈이지.




3) TreeRNN의 진화: 더 똑똑한 의미 조합
- Standard TreeRNN의 단순한 조합 방식을 넘어 더 발전된 모델들도 등장했어.
- RNTN (Recursive Neural Tensor Network):
텐서(Tensor)라는 고차원 행렬을 도입해서 두 자식 벡터 간의 상호작용을 훨씬 풍부하게 모델링했어. 이것이 RNTN이 "not very good" 같은 부정 구문을 성공적으로 해석할 수 있었던 비결이야.
- Tree-LSTM: LSTM의 핵심 아이디어인 게이트(gate) 메커니즘을 트리 구조에 적용한 모델이야. 각 노드는 여러 자식 노드로부터 정보를 받을 때, 어떤 정보를 얼마나 '기억'하고 '잊을지'를 게이트를 통해 동적으로 결정해. 덕분에 문장 구조 내에서 중요한 의미 정보를 더 효과적으로 보존하고 전달할 수 있게 됐지.


4) 명확한 강점과 치명적인 한계
- 강점:
- 해석 가능성 (Interpretability): 모델이 문장을 어떻게 이해하는지 단계별로 추적할 수 있어. 트리의 중간 노드(예: '아주 귀여운 강아지'라는 명사구)의 벡터를 뽑아 그 의미를 분석하는 것이 가능해 '블랙박스' 모델보다 해석이 용이해.
- 우수한 일반화 성능: 문법 구조라는 강력한 귀납적 편향(inductive bias) 덕분에, 비교적 적은 데이터로도 문장의 구조적 패턴을 잘 학습하는 경향이 있어.
- 한계:
- 파서(Parser)에 대한 강한 의존성: 구문 분석기가 문장 구조를 잘못 분석하면, TreeRNN은 잘못된 뼈대 위에서 계산을 시작하므로 치명적인 오류로 이어져. '쓰레기가 들어가면, 쓰레기가 나온다'는 문제가 발생하기 쉽지.
- 계산 비효율성: 문장마다 구문 분석을 먼저 해야 하고, 계산 과정이 재귀적이라 GPU를 활용한 병렬 처리가 매우 어려워 속도가 느려.
- 구조적 경직성: 정보의 흐름이 구문 트리에 의해 엄격하게 제한돼. 현대의 트랜스포머는 어텐션 메커니즘을 통해 문장 내 모든 단어가 서로 직접 소통할 수 있는 것과 대조적이야.

5) 현대 NLP에서 TreeRNN의 유산
- 이런 한계들 때문에 TreeRNN은 현재 SOTA 모델의 자리를 트랜스포머에 내주었어. 하지만 TreeRNN의 아이디어는 'Syntax-aware Transformers' 와 같은 이름으로 계속 연구되고 있으며, 언어의 계층적 구조가 의미 이해에 중요하다는 유산은 여전히 큰 영감을 주고 있어.
3. CNN vs. TreeRNN: 비교 및 최신 동향
1) 두 모델의 비교
- CNN:
- 장점: 연산이 매우 효율적이고 병렬화가 쉬워 속도가 빠르며, 텍스트 분류와 같은 작업에서 강력한 성능을 보여줘.
- 단점: 언어의 계층적, 재귀적 구조를 명시적으로 모델링하지는 못하고, n-그램이라는 고정된 창(window) 크기로만 정보를 처리하는 한계가 있어.
- TreeRNN:
- 장점: 인간의 언어 처리 방식과 유사하게 문장의 계층적 구조를 명시적으로 모델링하여 해석 가능성이 높고, 복잡한 의미 조합을 잘 포착해.
- 단점: 구문 트리에 대한 의존성이 높고, 연산이 순차적(재귀적)이라 병렬화가 어려워 CNN보다 속도가 느려.
- 최신 동향: 현재 NLP 분야의 대부분의 SOTA(State-of-the-Art) 모델들은 트랜스포머(Transformer) 아키텍처를 기반으로 하고 있어. 이 강의에서 다룬 CNN이나 TreeRNN은 트랜스포머의 등장 이후 주류에서 다소 벗어났지만, 이들의 아이디어는 여전히 중요해.
- 기술적 배경: 트랜스포머는 CNN의 병렬 처리 능력과, RNN 계열(TreeRNN 포함)이 다루려 했던 장거리 의존성 문제를 모두 해결하기 위해 등장했어. 핵심은 셀프 어텐션(Self-Attention) 메커니즘이야.
- 셀프 어텐션: 문장 내의 한 단어가 다른 모든 단어와 직접적으로 관계를 맺고, 어떤 단어에 더 '주목(attention)'해야 할지를 계산하는 방식이야. TreeRNN처럼 고정된 트리에 갇히거나, CNN처럼 고정된 n-그램 크기에 얽매이지 않고, 문장 전체의 문맥을 한 번에 고려하여 각 단어의 의미를 동적으로 파악할 수 있어. 이로 인해 훨씬 더 유연하고 강력한 정보 흐름이 가능해졌지.
- 최신 동향 및 BERT/GPT: BERT와 GPT는 모두 이 트랜스포머 아키텍처를 기반으로 만들어진 사전 학습 언어 모델(Pre-trained Language Model)이야. BERT는 문장의 양방향 문맥을 모두 고려하고, GPT는 다음 단어를 예측하는 단방향 문맥에 특화되어 있어. 이 모델들은 방대한 양의 텍스트 데이터로 미리 학습된 후, 특정 NLP 과제(번역, 요약, 질의응답 등)에 맞게 미세 조정(fine-tuning)되어 놀라운 성능을 보여주고 있어.
- 명확한 한계점: 트랜스포머는 뛰어난 성능에도 불구하고 몇 가지 한계점을 가지고 있어.
- 계산 복잡도: 셀프 어텐션은 문장 길이가 길어질수록 계산량이 제곱으로 증가(O(n²))하기 때문에 매우 긴 시퀀스를 처리하기 어렵고, 막대한 컴퓨팅 자원을 필요로 해.
- 위치 정보 부재: 본질적으로 단어의 순서를 고려하지 않기 때문에, 위치 인코딩(Positional Encoding)이라는 별도의 정보를 인위적으로 주입해야만 해.
- 해석의 어려움: 모델이 왜 그런 결정을 내렸는지 내부 작동을 이해하기 어려운 '블랙박스' 모델이라는 비판을 받기도 해.