Natural Language Processing with PyTorch
  • 소개글
  • 서문
  • Index
  • 딥러닝을 활용한 자연어 처리 개요
    • 자연어 처리란 무엇일까?
    • 딥러닝 소개
    • 왜 자연어 처리는 어려울까?
    • 무엇이 한국어 자연어 처리를 더욱 어렵게 만들까?
    • 자연어 처리의 최근 추세
  • 기초 수학
    • 서문
    • 랜덤 변수와 확률 분포
    • 쉬어가기: 몬티 홀 문제
    • 기대값과 샘플링
    • Maximum Likelihood Estimation
    • 정보 이론
    • 쉬어가기: MSE 손실 함수와 확률 분포 함수
    • 마치며
  • Hello 파이토치
    • 딥러닝을 시작하기 전에
    • 설치 방법
    • 짧은 튜토리얼
    • 쉬어가기: 윈도우즈 개발 환경 구축
  • 전처리
    • 전처리란
    • 코퍼스 수집
    • 코퍼스 정제
    • 분절
    • 병렬 코퍼스 정렬
    • 서브워드 분절
    • 분절 복원
    • 토치텍스트
  • 유사성과 모호성
    • 단어의 의미
    • One-hot 인코딩
    • 시소러스를 활용한 단어 의미 파악
    • 특징
    • 특징 추출하기: TF-IDF
    • 특징 벡터 만들기
    • 특징 유사도 구하기
    • 단어 중의성 해소
    • Selectional Preference
    • 마치며
  • 단어 임베딩
    • 들어가며
    • 차원 축소
    • 흔한 오해 1
    • Word2Vec
    • GloVe
    • Word2Vec 예제
    • 마치며
  • 시퀀스 모델링
    • 들어가며
    • Recurrent Neural Network
    • Long Short Term Memory
    • Gated Recurrent Unit
    • 그래디언트 클리핑
    • 마치며
  • 텍스트 분류
    • 들어가기
    • 나이브 베이즈를 활용하기
    • 흔한 오해 2
    • RNN을 활용하기
    • CNN을 활용하기
    • 쉬어가기: 멀티 레이블 분류
    • 마치며
  • 언어 모델링
    • 들어가며
    • n-gram
    • 언어 모델의 평가 방법
    • SRILM을 활용한 n-gram 실습
    • NNLM
    • 언어 모델의 활용
    • 마치며
  • 신경망 기계번역
    • 들어가며
    • Sequence-to-Sequence
    • Attention
    • Input Feeding
    • 자기회귀 속성과 Teacher Forcing 훈련 방법
    • 탐색(추론)
    • 성능 평가
    • 마치며
  • 신경망 기계번역 심화 주제
    • 다국어 신경망 번역
    • 단일 언어 코퍼스를 활용하기
    • 트랜스포머
    • 마치며
  • 강화학습을 활용한 자연어 생성
    • 들어가며
    • 강화학습 기초
    • 정책 기반 강화학습
    • 자연어 생성에 강화학습 적용하기
    • 강화학습을 활용한 지도학습
    • 강화학습을 활용한 비지도학습
    • 마치며
  • 듀얼리티 활용
    • 들어가며
    • 듀얼리티를 활용한 지도학습
    • 듀얼리티를 활용한 비지도학습
    • 쉬어가기: Back-translation을 재해석하기
    • 마치며
  • NMT 시스템 구축
    • 파이프라인
    • 구글의 NMT
    • 에딘버러 대학의 NMT
    • MS의 NMT
  • 전이학습
    • 전이학습이란?
    • 기존의 사전 훈련 방식
    • ELMo
    • BERT
    • GPT-2
    • XLNet
    • 마치며
  • 이 책을 마치며
  • 참고문헌
Powered by GitBook
On this page
  1. 듀얼리티 활용

쉬어가기: Back-translation을 재해석하기

Previous듀얼리티를 활용한 비지도학습Next마치며

Last updated 5 years ago

이번 절에서는 앞서 이야기했던 back-translation을 듀얼리티 관점에서 수식으로 해석해보 겠습니다. 기존의 back-translation이 추상적 관점에서 왜 잘 동작하는지 이야기하고 넘어갔다면, 이번에는 수식의 해석을 통해 그 이유를 파악할 수 있습니다. 이와 관련해 논문[62]에서는 기존의 back-translation에 대한 해석을 듀얼리티 관점에서 수식으로 풀어냈습니다. 한번 살 펴보겠습니다.

먼저, 다음과 같이 N개의 소스 문장 $x$ , 타깃 문장 $y$ 으로 이루어진 양방향 병렬 코퍼스 $\mathcal{B}$ 와 S개의 타깃 문장 $y$ 로만 이루어진 단일 언어 코퍼스 $\mathcal{M}$ 이 있다고 가정합니다.

B={(xn,yn)}n=1NM={ys}s=1S\begin{aligned} \mathcal{B}&=\{(x^n, y^n)\}^N_{n=1} \\ \mathcal{M}&=\{y^s\}^S_{s=1} \end{aligned}BM​={(xn,yn)}n=1N​={ys}s=1S​​

앞서 다룬 DUL과 같이, 우리가 최종적으로 최소화하려는 손실 함수는 다음과 같이 표현할 수 있습니다.

L(θ)=−∑n=1Nlog⁡P(yn∣xn;θ)−∑s=1Slog⁡P(ys)\mathcal{L}(\theta)=-\sum_{n=1}^N{\log{P(y^{n}|x^{n};\theta)}}-\sum_{s=1}^S{\log{P(y^s)}}L(θ)=−∑n=1N​logP(yn∣xn;θ)−∑s=1S​logP(ys)

DUL과 마찬가지로 $P(y)$ 는 주변 분포의 속성을 활용해 표현할 수 있을 겁니다. 다만 여기서는 좌변이 $P(y)$ 가 아닌 $\log{P(y)}$ 임을 주목해주세요.

log⁡P(y)=log⁡∑x∈XP(y∣x)P(x)=log⁡∑x∈XP(x∣y)P(y∣x)P(x)P(x∣y)≥∑x∈XP(x∣y)log⁡P(y∣x)P(x)P(x∣y)=Ex∼P(x∣y)[log⁡P(y∣x)+log⁡P(x)P(x∣y)]=Ex∼P(x∣y)[log⁡P(y∣x)]+Ex∼P(x∣y)[log⁡P(x)P(x∣y)]=Ex∼P(x∣y)[log⁡P(y∣x)]−KL(P(x∣y)∣∣P(x))\begin{aligned} \log{P(y)}&=\log{\sum_{x\in\mathcal{X}}{P(y|x)P(x)}} \\ &=\log{\sum_{x\in\mathcal{X}}{P(x|y)\frac{P(y|x)P(x)}{P(x|y)}}} \\ &\ge\sum_{x\in\mathcal{X}}{P(x|y)\log{\frac{P(y|x)P(x)}{P(x|y)}}} \\ &=\mathbb{E}_{\text{x}\sim{P(\text{x}|y)}}\Big[\log{P(y|\text{x})}+\log{\frac{P(\text{x})}{P(\text{x}|y)}}\Big] \\ &=\mathbb{E}_{\text{x}\sim{P(\text{x}|y)}}\Big[\log{P(y|\text{x})}\Big]+\mathbb{E}_{\text{x}\sim{P(\text{x}|y)}}\Big[\log{\frac{P(\text{x})}{P(\text{x}|y)}}\Big] \\ &=\mathbb{E}_{\text{x}\sim{P(\text{x}|y)}}\Big[\log{P(y|\text{x})}\Big]-\text{KL}\big(P(\text{x}|y)||P(\text{x})\big) \end{aligned}logP(y)​=logx∈X∑​P(y∣x)P(x)=logx∈X∑​P(x∣y)P(x∣y)P(y∣x)P(x)​≥x∈X∑​P(x∣y)logP(x∣y)P(y∣x)P(x)​=Ex∼P(x∣y)​[logP(y∣x)+logP(x∣y)P(x)​]=Ex∼P(x∣y)​[logP(y∣x)]+Ex∼P(x∣y)​[logP(x∣y)P(x)​]=Ex∼P(x∣y)​[logP(y∣x)]−KL(P(x∣y)∣∣P(x))​

우리는 젠센 부등식Jensen’s inequality 정리를 사용해 항상 $\log{P(y)}$ 보다 작거나 같은 수식으로 정리할 수 있습니다. 젠센 부등식에 대해 더 이야기해보겠습니다. 로그의 함수 곡선은 다음과 같이 생겼습니다. 이때 두 점 $x_1,x_2$ 에 대한 평균을 $x_m=1/2\times(x_1+x_2)$ 라고 하겠습니다. 그럼 $\log{x_m}\ge1/2\times(\log{x_1}+\log{x_2})$ 은 항상 성립하는 것을 알 수 있습니다.

이 성질을 이용하여 우리는 $\log{P(y)}$ 보다 항상 작거나 같음을 알 수 있습니다. 여기에 음의 부호 를 붙여주면 부등호의 방향은 바뀔 것입니다.

우리는 부등호가 항상 성립함을 확인했으므로, $-\log{P(y)}$ 보다 항상 큰 수식을 최소화하는 것은 마찬가지로 $-\log{P(y)}$ 도 최소화하는 것임을 알 수 있습니다. 그럼 조금 전 최소화하려 했던 $\mathcal{L}(\theta)$ 에 이 수식을 대입해보면 다음과 같이 정리할 수 있습니다.

우리는 결국 $\tilde{\mathcal{L}}(\theta)$ 를 다시 정의했습니다. 앞의 $-\log{P(y)}$ 에 대한 부등호화 마찬가지로 $\tilde{\mathcal{L}}(\theta)$ 를 최소화하는 것은 $\mathcal{L}(\theta)$ 를 최소화하는 효과를 만들 수 있습니다. 따라서 $\tilde{\mathcal{L}}(\theta)$ 를 최소화하기 위해 경사하강법을 수행하여 최적화를 수행해야 합니다.

이 새로운 손실 함수 $\theta$ 에 대해 미분하면 다음과 같이 될 것입니다. 쿨백-라이블러 발산(KLD) 부분은 $\theta$ 에 대해 상수이므로 생략될 것입니다.

최종적으로 얻게 된 손실 함수의 각 부분의 의미를 살펴보겠습니다. 첫 번째 항 $\sum{n=1}^N{\nabla\theta\log{P(y^n|x^n;\theta)}}$ 은 당연히 $x^n$ 이 주어졌을 때, $y^n$ 의 확률을 최대로 하는 $\theta$ 를 찾는 것을 가리킵니다. 두 번째 항 $\frac{1}{K}\sum{s=1}^S{\sum{i=1}^K{\nabla_\theta\log{P(y^s|x_i;\theta)}}}$ 의 경우에는 샘플링된 문장 $x^i$ 이 주어졌을 때, 단일 언어 코퍼스의 문장 $y^s$ 가 나올 평균 확률을 최대로 하는 $\theta$ 를 찾는 것이 됩니다. 결국 back-translation을 통해 수행하던 것이 $\tilde{\mathcal{L}}(\theta)$ 를 최소화하는 것임을 알 수 있습니다.

−log⁡P(y)≤−Ex∼P(x∣y)[log⁡P(y∣x)]+KL(P(x∣y)∣∣P(x))-\log{P(y)}\le-\mathbb{E}_{\text{x}\sim{P(\text{x}|y)}}\Big[\log{P(y|\text{x})}\Big]+\text{KL}\big(P(\text{x}|y)||P(\text{x})\big)−logP(y)≤−Ex∼P(x∣y)​[logP(y∣x)]+KL(P(x∣y)∣∣P(x))

L(θ)≤−∑n=1Nlog⁡P(yn∣xn;θ)−∑s=1S(Ex∼P(x∣ys)[log⁡P(ys∣x;θ)]−KL(P(x∣ys)∣∣P(x)))≈−∑n=1Nlog⁡P(yn∣xn;θ)−1K∑s=1S∑i=1Klog⁡P(ys∣xi;θ)+∑s=1SKL(P(x∣ys)∣∣P(x))=L~(θ)\begin{aligned} \mathcal{L}(\theta)&\le-\sum_{n=1}^N{\log{P(y^{n}|x^{n};\theta)}}-\sum_{s=1}^S{\Big(\mathbb{E}_{\text{x}\sim{P(\text{x}|y^s)}}\big[\log{P(y^s|\text{x};\theta)}\big]-\text{KL}\big(P(\text{x}|y^s)||P(\text{x})\big)\Big)} \\ &\approx-\sum_{n=1}^N{\log{P(y^{n}|x^{n};\theta)}}-\frac{1}{K}\sum_{s=1}^S{\sum_{i=1}^K{\log{P(y^s|x_i;\theta)}}}+\sum_{s=1}^S{\text{KL}\big(P(\text{x}|y^s)||P(\text{x})\big)} \\ &=\tilde{\mathcal{L}}(\theta) \end{aligned}L(θ)​≤−n=1∑N​logP(yn∣xn;θ)−s=1∑S​(Ex∼P(x∣ys)​[logP(ys∣x;θ)]−KL(P(x∣ys)∣∣P(x)))≈−n=1∑N​logP(yn∣xn;θ)−K1​s=1∑S​i=1∑K​logP(ys∣xi​;θ)+s=1∑S​KL(P(x∣ys)∣∣P(x))=L~(θ)​

∇θL~(θ)=−∑n=1N∇θlog⁡P(yn∣xn;θ)−1K∑s=1S∑i=1K∇θlog⁡P(ys∣xi;θ)\nabla_\theta\tilde{\mathcal{L}}(\theta)=-\sum_{n=1}^N{\nabla_\theta\log{P(y^n|x^n;\theta)}}-\frac{1}{K}\sum_{s=1}^S{\sum_{i=1}^K{\nabla_\theta\log{P(y^s|x_i;\theta)}}}∇θ​L~(θ)=−∑n=1N​∇θ​logP(yn∣xn;θ)−K1​∑s=1S​∑i=1K​∇θ​logP(ys∣xi​;θ)

젠슨스 부등식의 예