inflearn logo
강의

Course

Instructor

Learning Transformer Through Implementation

Section 10 Quiz

length_penalty 부분이 없는 것 같습니다.

Resolved

54

jcy4023

21 asked

1

130강 끝날 즈음에 다음 섹션이 아니라 length_penalty에 대한 설명을 해주신다고 하셨는데 없는 것 같습니다!

딥러닝 pytorch encoder-decoder bert transformer

Answer 1

0

dooleyz3525

안녕하십니까,

아, 이걸 설명하는 걸 빼먹었군요. 알려 주셔서 감사합니다.

일단 글로 먼저 말씀드립니다. 추가 영상은 시간이 나는대로 작성하겠습니다.

single_translate_beam() 과 같은 decode 시 고려해야 할 사항이, 문장을 생성하는 토큰들이 늘어날 수록 토큰 생성 확률(확률값은 1보다 작음)을 곱하게 되어서(여기서는 로그 확률로서, 확률값이 1보다 작아서, 로그 확률은 음수값이 됨) 토큰 개수가 작은, 짧은 길이의 문장들만 선호되는 현상이 발생하게 됩니다.

이를 개선하기 위한 방식이 짧은 길이의 문장들은 penalty를 주는 방법인데, 일반적으로 누적 로그 확률을 문장 길이(토큰 수, length)로 나누되, penalty 적용 강도를 적용 할 수 있도록 합니다.

이를 위해, 아래와 같은 length_penalty_fn() 함수를 통해 beam 선택 시 짧은 길이의 문장들은 penalty를 주되, alpha값으로 적용 강도를 조정합니다.

def length_penalty_fn(length, alpha):

return length ** alpha

여기서 alpha가 바로 length_penalty 값입니다.

final score filtering은 누적 로그확률 / length_penalty_fn 함수 반환값을 적용하게 됩니다. alpha가 0 이면 length penalty가 없으며(length ** alpha = 1임), a가 클수록 length penalty가 커집니다. 1로 설정하면 짧은 문장 편향은 사라지지만, 반복/미사여구 사용이 많아지는 과도한 보정이 됩니다. 1 이상은 사용하지 않고, 보통 0.6 ~ 0.8 정도 적용합니다.

결국 single_translate_beam(...)에서 sorted로 candidates 들을 key에서 정의한 lambda 함수, 즉 누적 로그 확률을 length_penalty_fn()으로 나눈 기준으로 sescending 정렬한 결과를 beam_width 갯수만큼 추출하여 최종 beams를 만들게 됩니다.

beams = sorted(

candidates,

key=lambda x: x[1]/length_penalty_fn(x[0].shape[1], length_penalty), # x[1]은 누적 로그 확률. x[0][0]

reverse=True,

)[:beam_width]

 

감사합니다.

import torch가 안되는 경우는 어떻게 하나요?

0

13

1

소리가 겹쳐서 들려요

0

19

2

20강에서 파인튜닝 때 사용한 데이터가 없어졌습니다. LoRA Trainer 매개변수도 라이브러리 업그레이드로 수정되었습니다.

0

20

1

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드 먼저? 구현하며 배우는 Transformer 먼저?

0

30

1

수업자료

0

23

2

전 강의와 전혀 이어지지가 않음

0

30

1

pytorch local 설치 옵션에 conda 가 없습니다.

0

38

3

pc에서는 괜찮은데 탭으로 들으니 화면확대시 화면이 까맙니다

0

22

1

강의 환경설정 질문

0

39

2

모든 자료 다운로드 누를때마다 똑같은 excel파일이 다운로드 받아짐. 노션 주소 공유되나요?

0

31

2

오토인코더+ Knn, SVC 로 해석하는경우

0

45

3

강의 영상 오류

0

58

1

Embedding 모델 fine tuning 관련 질문

0

71

2

코드에 오타가 있는 것 같습니다

0

53

2

코드 오타가 있는것 같습니다.

0

68

2

트랜스포머 모델 구조에서 Encode-Decoder Attenttion에 대해서

0

67

2

트랜스포머 구조에서 블럭갯수에 대해서

0

61

2

RNN에서 출력 y에대해서..

0

58

1

embedding 값 시각화 해보기에서

0

52

1

멀티 헤드 셀프 어텐션에서 Wq, Wk, Wv의 구조 관련 질문

0

79

3

MLM, NSP 구현 여부

0

70

2

bert encoding input_ids.size(1)에 대하여

0

58

2

트랜스포머 학습 강의

0

92

2

Q, K, V 초기 임베딩

0

69

1