Afrikaans
Akan
Albanian
Amharic
Arabic
Armenian
Azerbaijani
Basque
Belarusian
Bemba
Bengali
Bihari
Bosnian
Breton
Bulgarian
Cambodian
Catalan
Cebuano
Cherokee
Chichewa
Chinese (Simplified)
Chinese (Traditional)
Corsican
Croatian
Czech
Danish
Dutch
Esperanto
Estonian
Ewe
Faroese
Filipino
Finnish
French
Frisian
Ga
Galician
Georgian
German
Greek
Guarani
Gujarati
Haitian Creole
Hausa
Hawaiian
Hebrew
Hindi
Hmong
Hungarian
Icelandic
Igbo
Indonesian
Interlingua
Irish
Italian
Japanese
Javanese
Kannada
Kazakh
Kinyarwanda
Kirundi
Kongo
Korean
Krio (Sierra Leone)
Kurdish
Kurdish (Soranî)
Kyrgyz
Laothian
Latin
Latvian
Lingala
Lithuanian
Lozi
Luganda
Luo
Luxembourgish
Macedonian
Malagasy
Malay
Malayalam
Maltese
Maori
Marathi
Mauritian Creole
Moldavian
Mongolian
Myanmar (Burmese)
Montenegrin
Nepali
Nigerian Pidgin
Northern Sotho
Norwegian
Norwegian (Nynorsk)
Occitan
Oriya
Oromo
Pashto
Persian
Polish
Portuguese (Brazil)
Portuguese (Portugal)
Punjabi
Quechua
Romanian
Romansh
Runyakitara
Russian
Samoan
Scots Gaelic
Serbian
Serbo-Croatian
Sesotho
Setswana
Seychellois Creole
Shona
Sindhi
Sinhalese
Slovak
Slovenian
Somali
Spanish
Spanish (Latin American)
Sundanese
Swahili
Swedish
Tajik
Tamil
Tatar
Telugu
Thai
Tigrinya
Tonga
Tshiluba
Tumbuka
Turkish
Turkmen
Twi
Uighur
Ukrainian
Urdu
Uzbek
Vietnamese
Welsh
Wolof
Xhosa
Yiddish
Yoruba
Zulu
안녕하세요
mlbu 14강 두 번째 트랜스포머
시간입니다
한국 많이 따뜻해진 것 같아요
학생들이
입고 있는 옷이
랑 되게 다른 거 같은데
[음악]
지난 시간에 이제 트랜스포머라는
모델을 처음 배우기 시작을 했어요
오늘은 그거를 컴퓨터 비전 쪽에서
어떻게 활용하는지 배워보는 시간을
갖도록 하겠습니다
먼저 공지가 있는데요
다음 주는 일주일 동안 수업이
없습니다 제가 학회를 가야 돼 가지고
그 유럽쪽 시간대에 있다 보니까 지금
여기가 이제 미국이랑
한국 시간에 프렌들리하게 제가 시간을
잡아놨더니 유럽에서는 정말 안 좋은
시간대에요 그래가지고
다음주는 수업이 없고 그 프로젝트
하는 시간으로 쓰시면 됩니다
그래서이 시간 자유롭게 여러분들
팀원들이랑 같이 미팅하는 시간으로
잡으셔도 되고 뭐
코딩하는 시간으로 쓰셔도 좋고 뭐
다음주는 수업이 없고 그 다음 주
5월 9일이 맞나요
5월 9일 날 우리는 다시 만나도록
하겠습니다 그리고이
쉬는 기간 동안 아마 호박 3가 나갈
거예요
손목소리는 뭐 현재 예정은
58일까지로 되어 있는데 나가는
날로부터 2주 정도
드린다고 생각하시면 될 것 같고
etl을 공지 나갈 거니까 봐주시면
될 것 같습니다
혹시 질문 있으신가요
예 없으시면 오늘 내용 들어가기 전에
지난 시간에 배웠던 거 한번 복습을
해 볼게요 자 오늘은 제가 그림을
여기다 붙여 놨는데
지난 시간에 우리가 트랜스포머라는 걸
배웠어요이 트랜스포머가 이제 어떻게
동작하는 건지를 한번
임서영 학생이 설명해주시면 좋을 것
같습니다
인풋으로
만약에
월드라고 친다면 인풋 프라임 패딩이
들어가고
멀티 헤드 어텐션에서
문장이 들어가면
각각류 그리고 키를 이용해서
셀프어텐션을 구한 다음에 그
컨텍스트를 이용한 벡터를
리뉴얼 트랜스폼에서
새롭게 자기 자신을 만들어서 그걸
엔코딩에 학습한 다음에
디코딩에서
만약 세컨드 세컨즈
트레이닝이라고 하면 다시 그거를
패턴에서 똑같은 방식으로 나오게
하는
구조라고 이해했습니다
네 감사합니다
전체적으로 잘 설명해 주신 거 같은데
한번 다시 정리해 볼게요
트랜스포머 핵심적으로
트랜스포머가 뭐냐라고 하면은
멀티 헤디드
셀프어텐션이라고 얘기를 했었어요
멀티 헤드가 뭐예요 우리가 저기서 그
커리키 밸류를 여러 개를 만들어 쓴다
그랬죠 그래서 멀티 해야 되고
셀프어텐션이라는 거는 어텐션을 하는데
기본적으로 우리가 배웠던 어텐션
메커니즘으로 돌아가는데 그 어텐션이
우리가 지금
학습하고자 하는 그 대상 이미지가
됐든 텍스트가 됐든 문장이든 뭐든이
서브 컴퍼넌트들간에 서로가 서로를
어떻게 하는 구조로 간다라는게
특징이었었어요 그래서 여기
이미지가 이렇게 여러개가 쭉 들어가는
걸 예제로 해놨었는데
얘네들을 표현하는
벡터가 있고
얘네들을 각각 커리키 밸류로 만들어
가지고 자기들끼리 서로 어텐드 하게
해서 자기들의 어 그
루프젠테이션을 거기에 있는 모든
컴퍼넌트들 간의 어떤 wayted
summ로 표현을 해 가지고 이제
컨텍스트가 약간 들어가 있는
컨텍솔라이즈 되어 있는 벡터로
트랜스폼 시켜주는 모델이라고 얘기를
했죠 그리고 그거를 여러 번 이렇게
반복을 하게 되면은 전체 문맥을 이제
다 어느 정도 가지고 있는 이런
식으로 만들어질 것이다라는게 우리가
트랜스포머에 인코더의 기본적인
아이디어였었고요
그 지금 이제 서양 학생이 디코더
쪽도 잘 얘기를 해주셨는데
인코더가 이렇게 되고 나면은 디코더를
할 때는 거의 똑같은 구조를
가져가는데
차이가 약간 있다 그랬죠 하나는
마스킹을 한다 그랬어요 마스킹을
한다는 건 무슨
의미냐면이 시퀀스의 지금까지 우리가
만들어낸 부분들만 참조를 하고
뒤에 있는 것들은 이제 어차피 랜덤한
값이니까 아직 모르는 거니까 거기는
마스킹을 해가지고 어쨌든 같은 개수가
인풋으로 들어가야 돼요 그래서
마스킹하는 부분이 들어가 있고 그
다음에 이제 뒤쪽에서는 크로스로
들어온다 그랬죠
쿼리는 아래쪽에서
들어왔던 인풋 그대로 나가는데이
키랑 밸류가
인풋에서 우리가 인코딩 됐던 것들이
들어온다 그랬어요 왜 그런다 그랬죠
예를 들면 영어를 불어로 번역한다
그러면은
다음 불어 단어가 뭐가 나올지는 원문
영어를 참조해야지 그게 뭐가 될지
우리가 알 수 있잖아요 그래서
키랑 밸류는 이쪽 전체를 액세스
해가지고 우리가 결정을 한다 이런
식으로 하고
rnn에서 했던 것처럼 오토리그리스도
하게 한 단어씩 뽑아낸다 뭐 이런
식의 이야기를
지난 시간에 했었어요 잘해주셨고요
그 다음에 김남기 학생
네 여기 화면에는 없는데 우리가 이제
이거 하고 나서 볼트라는 거를 막판에
짧게 배웠어요
볼트가 어떤 식으로 동작하는지 한번
기억나는 대로 얘기해 주시겠어요
가지고 있는데
중간에
마스킹 중간에 마스킹을 쓰여서
마스킹에 대한
인베딩을 붙인 뒤에 그걸 다시
복원하는 식으로 학습을 하는 모델로
알고 있습니다네
알겠습니다
김지웅 학생
혹시 더 추가할 만한 이야기 있을까요
인베딩에서 그 토큰 이메이딩이랑
세그먼트
웨딩이랑 포지션 인베딩을
사용한다는 거에는
크게
생각나는 거 없습니다 아네 감사합니다
인풋으로 들어가는게 세 가지가
더해져서 들어간다 그랬죠 그 얘기 잘
해주셨고 자 또 한 번만 더
여쭤볼게요 신지원 학생
네 혹시 더 추가할 얘기 있을까요
저도 그
단어마다 토큰이랑
포지션을
들어간다 그리고 어 내가 여기까지
구조는 알고 있고
셀프 스쿨바이스라는 장점이 있는 걸로
알고 있습니다네
감사합니다 제가 많이 강조를 안 했나
보네요 역시 자 그
인풋에 대한 거는 지금 다들 잘
얘기해 주신 거 같아요 그
워드토큰들 들어가고
포지션들 포지션 인코딩 들어가고 그
다음에 두 개의 문장이 들어간다
그랬죠 그 두 개의 문장을
얘는 앞에 문장 얘는 뒤에 문장인
거를 표현해 주는 거가 하나씩 더
더해진다고 그랬죠 자 왜 두 개의
문장을 넣어요 우리 아까 그
mlm에 대해서 사실 그게 더
중요하다고 그랬죠 mlm은 남기
학생이 잘 얘기해 주셨고
테스크가 하나 더 있었죠 그 두 개가
서로 인접해 있는
센텐스냐 아니냐를
판별하는
로스를 하나 추가로 더 준다 그랬어요
이거를 다들 잘 기억을 못한게 제가
지난번에 수업할 때 이거 생각보다
별로 중요하지 않았다라고 얘기를 해서
그런 거 같아요
나중에 이제 사람들이 연구해 보니까
저거 없어도 뭐 크게
상관없었더라라는게 나오기는 했어요
근데 어쨌든
그까지만 해도 이게 되게 중요하다고
했었고 어쨌든 뭐 조금이라도 도움이
되기는 해요 그래서
문장과 문장 간의 관계를 배우는데
있어서는
요게 좀 중요하다고이 사람들은 주장을
했고 아마이 이후에 이게 중요하지
없어도 상관없다고 얘기하는 거는
데이터셋이 그만큼 훨씬 커졌기 때문일
거예요 그래서 이제
작은 데이터셋을 살 때는 이런 것도
좀
고려가 되어야 한다라고 생각을 해서
이제 나왔던 거고 그 얘기를
혹시 한번 해주실까 해서 제가 계속
물어봤어요
네 그래서 지난 시간에 배웠네요 잘
복습해 주신 거 같고
오늘은요 트랜스포머 구조를 우리
컴퓨터 비전이니까 이미지와 비디오에서
어떻게 활용하고 있는지를 배워 볼
거예요
자
먼저 이미지부터 한번 볼게요
vit라고 불리는 모델인데 이제 그냥
비전 트랜스포머의 줄임말이에요
트랜스포머가 nlp쪽에서 하도 잘
되니까 이거를 우리가 어떻게 한번 좀
비전에서도 갖다 써볼까 사람들이 많은
생각을 했었는데
요게 나오는데 시간이 좀 걸렸어요 그
트랜스포머 처음 나온게 한
적어도 3년 정확히 기억이 안 나는데
2017년 정도였던 거 같은데 3년이
더 걸렸어요 이게 나오는데 자
그래서이
논문의 제목이 뭐였냐면요
그 16발 16 이미지 패치는 하나의
워드와 같다 뭐 이런
식의 제목을
달아 놨었어요
지금 보시면은 일단이
얘기를 해야 될 것 같아요 우리가
트랜스포머는 인풋이 뭐가 들어간다
그랬어요
무조건 시퀀스가 들어간다 그랬죠
우리가 배우고 대상을
스플릿을 해서 그거에 어떤 서브
컴포넌트들의 시퀀스로 들어가게 되고
그 서브 컴포넌트들끼리
뭔가
서로가 서로에 대해서 표현하는 법을
배우는게 이제이 트랜스포머의 방식이라
그랬는데 그
문장 같은 경우는 너무 자연스럽게
워드들의 시퀀스로 주어지죠 애초에
그리고 뭐 나중에 비디오 하겠지만
비디오도 마찬가지로 프레임들의
시퀀스로 우리가 주어지는 것을 그냥
그대로 활용하면 될 것 같아요
근데 이미지는 달랑 한 장 딱
지워지잖아요 이거를 이제 어떻게
시퀀스로 만들 것인가 아니면은
시퀀스를 안 만들고 하나만 넣어
가지고 어떻게 이걸 처리를 할 것인가
때문에 이제 좀 고민이 됐던 거예요
트랜스포머 구조가 이미지에는 적합하지
않은 것 같다라고 사람들이 처음에
생각을 했었던 거예요
그래가지고 이걸 어떻게 하면 무식하게
좀
시퀀스로 만들어 볼까라고 해서 생각을
한게 16번에 16패치로 그냥 쪼개자
이미지가 크게 있으면은 16발
16짜리 조그만 이미지 패치들이 여러
개가 쭉 나열되어 있는 것처럼 생각을
하면은
16발 16짜리 조그만 패치들이
2차원으로 나열되어 있는 어떤 이것도
일종의 시퀀스라고 볼 수 있는 거죠
더 작은 이미지들의 시퀀스라고 볼 수
있는 거죠
그렇게 그냥 무작정 한번 잘라 본
거예요
그래가지고
결과적으로 트랜스포머에 넣고 이걸
학습을 시켰더니 잘 돼서
논문을 이제 그렇게 쓴 거죠 16발
16 이미지 패치가 마치 문장으로
치면 하나의 단어가 그 문장의
여러가지
문장에 담고 있는 그
복잡한 의미를
단어 하나하나 갖고 단위를 가지고
있는 거잖아요
얘도 마찬가지로 이미지가 표현하고자
하는 전체의 그 의미의 아주 일부분을
저 정도 크기에 조금은 패치들이 마치
단어처럼 구성요소를 가지고 있는 것
같다 뭐 이런 식의 의미를 가지고
저렇게 제목을 썼었어요 보시면은 이제
시퀀스 오브 리니어 인베링스가
들어가게 되는데요 이미지 패치가
나오게 되면요 자세한 얘기는 좀
이따가 할 건데 이미지 패치들이
하나하나가 각각
토큰들이 되는 거예요 그 워드 토큰
텍스트의 경우에 워드 토큰처럼
얘도 하나하나에 토큰들이 돼 가지고
트랜스포머 인코더에도 들어가게 되고
우리 지난 시간에 CLS 토큰 배웠던
것처럼 그거 붙여 가지고 거기
위에다가 하는 건 똑같이 할 거예요
그렇죠 지금 일단 배우는 그렇게
돌아가요요 그림도 우리 지난 시간에
배웠던 그 트랜스포머 구조 그림이
있었죠 이거랑 굉장히 비슷하게 생겼죠
왼쪽
인코더랑 거의 똑같이 생겼어요
실제로 똑같아요
자 그래서
vit가 어떻게 동작하는지 한번 제가
애니메이션을 만들어 봤는데 한번
볼게요
자 이미지가 이렇게 인풋이 들어와요
얘를
16번 16으로 쪼갠다고 했는데 꼭
16이어야 되는 건 아니고
p바이 p로 쪼개게 돼요 그래서 이제
하나하나의 크기가 p 곱하기 p고
전체의 크기가 이제 그걸 맞춰서
이렇게 나눠지겠죠 여기는 이제 아홉
개로 나눠지는 것을 제가 예로
들었는데 이렇게 나눠지고
그러면은 우리 이미지는 인풋 이미지는
x 원래 이제 x인데
x
p 1부터 9까지로 이렇게 쪼개졌다
얘네들의 시퀀스다라고 이제 표현이 된
거예요
얘는
각각은 p*p 즉 실험은 뭐 16
14 16 32 뭐 이런 걸로 실험을
했어요 이렇게 쪼개지게 되고
우리 CLS 토큰 지난 시간에 배웠죠
그 실제 있는 토큰들 말고 더미
토큰을 하나 넣어서
특정 하나에 바이어스가 되지 않은
전체를 표현하는 이미지 전체를
표현하는게 필요할 거니까 그거를 하기
위한 더미토큰을 하나 추가로 만든
거예요 무작위로 무작위 값으로 이렇게
채워져 있는
CLS 토큰 하나를 추가해서
총 10개의 토큰이 시퀀스로 들어가게
되는 거예요
자 요거를 분홍색으로 표시를 했어요
패치 베딩이라고 부르고
얘네들을 분홍색으로 표시했는데 왜
이게 패치
임베딩이냐이 인풋 크기는요
총 몇 개 수가 몇 개예요
값이
p 곱하기 p고
쓰리 채널이죠 rgb니까
얘네의 크기는 p^2 곱하기 C
차원이에요 인풋은
그렇죠 이거를
어떤 d1차원짜리 벡터로
리니엄 맵핑을 시켜줘요 아주 단순하게
그냥 리니어 매핑만 시켜주는 거예요
리니어 맵핑이라는 거는 우리 앞에서
리니어 클래스바를 배웠을 때 이거
크기 곱하기 이거 크기에서 그냥
리뉴얼하게 맵핑 시켜 주는 거예요
아주 단순한 형태의 어떤 인베딩이죠이
패치의 내용을 포함시키고 있는
그렇게 해서 뭐 우리가 이제 원하는
숫자의 크기의 벡터로 만들어 준
거예요
p^2 c가 이제 1024로 이제
줄어들게 되고 그 다음에
포지셔널 인코딩이 필요했었죠
트랜스포머는 여기서는 이제 그래서
포지셔널 인코딩이 0번까지 들어가는데
자 우리 지난 시간에 배웠던 거 다시
한번 떠올려 보면
포지션 인코딩 왜 필요해요
얘는
자기 자신을 기준으로 다른 애들과의
세밀러리티를 계산해서 자기를 트랜스폼
시키는 모델이죠
그러니까 내가 주인공이고 다른 애들이
어디에 있었는지는 순서가 상관이
없어요 그 로직만 따지면
근데
얘네들의 순서가 문장 같은 경우에
단어가 어떤 순서로 나열되어 있냐에
따라 의미가 달라지니까
순서를 어떤 식으로든 인코딩을 해줘야
돼서 저게 있었던 거죠 여기도
마찬가지예요이
9장의 이미지 패치가 이렇게 일정한
순서로 되어 있는 거랑
막 순서가 섞여 있는 거랑 그
이미지가 전달하는 내용이 완전히
달라지죠 그래서
얘네들이 어디에서 왔는지를 좀 보존할
수 있어야 될 것 같죠 그래서 얘도
포지셔널 인코딩이 필요하다는 생각을
할 수 있을 거예요
그럼 이제 어떻게 할 것이냐
문장 같은 경우에 우리 지난 시간에
이상하게 생긴 함수를 봤었죠 사인
코사인 뒤에 뭐 만군의 뭐 해가지고
너는 뭐 이런 거 했었잖아요 그런
식으로 해주는 이유가
nlp 같은 경우에는 그 제가
얘기했었죠 문장에서 뭐 그 상대적인
순서가 중요하고 그 바로 그 인접해
있는 애들끼리는 비슷해야 되고 뭐
이런 거를 얘기를 했었어요 여기서는
절대적인 위치가 2차원이 되죠
1에 있는 거랑 1에 있는 거랑 2에
있는 거랑 이것들이 2차원상의 어느
공간에 있는지에 대한 어떤 임베딩을
얘가 배워야 되는데
여기서는 이제 그런
식을 쓰지 않았어요
nlp처럼 디터미니스트가게 하지 않고
얘를 그냥 1024차원짜리
무적이 벡터로 만들어 놓고 그냥
데이터로부터 배워라라고 시켜 버려요
아무것도 안 해요 왜 1024냐이
d가
1024니까이 분홍색이랑 크기가
같아야 서로 더 할 수 있잖아요
이 분홍색의 크기는 우리가 그냥 정한
거예요
원래 들어오는 인풋의 크기는 p^2
곱하기 c고요
임베딩의 크기는 우리 맘대로 정할 수
있어요 d라고 그럼 여기서는
마찬가지로
n+1 들어온 거의 개수가 지금
n+1개의 토큰이고
얘네들을 이제 d로 보내주는 어떤
포지션을 해주는 그
뭐냐 인베릭 레이어만 있으면 되는
거예요
그렇죠 이거는
데이터로부터 배우는 거기 때문에
우리가 아무것도 하지 않고 1024
차원짜리
벡터로 그냥 만들어 주고 더하기만 한
거예요
그러면 얘가 이제 학습하면서 알아서
저 위치에 있다면 어떤 식으로
표현되어야 된다는 걸 배우는 거죠
배우기 되게 기대하는 거예요 진짜
배워지는지는 이따가 볼게요
자 고점이 차이고요 그래서 여기
지금식이 써 있는데 그
z로는 뭐가 되냐면요
x
클래스 요거는 이제 클래스예요 그
다음에
xp1부터 xpn까지는 얘네들은요
인베딩을 다 붙여 가지고
곱해주면
얘네들이 지금 다 1023차원짜리
벡터로 이렇게 만들어지는 거죠
그게 지금요 부분을 얘기한 거예요
2를 곱한 거 그리고이
포지션을 더하는게요 부분이죠
포지션 인코딩 더해지면 2의 크기는
어떻게 되겠어요
p^2 * c를 d로 보내는 리니어
맵핑이니까 그 두 개의 크기 곱한
것만큼 되겠고
포지셔널 인코딩은요
포지션이 총 n+1개가 있고
각이 그 d차원 벡터가 돼야 되니까
n+1 곱하기 d가 되겠죠
식 이해되시죠
네 그래서 이렇게 만들어지면은 우리가
이제 트랜스포머 인코드가 그냥
들어가는 거예요요 밑에까지만 비주얼
인풋이라서 뭔가 특별한게 있었던
거예요 여기서부터는 그냥 완전히
똑같아요 여기서부터는 우리 트랜스포머
인코더가 받아들인 인풋이 뭐예요
시퀀스 오브 토큰 인베딩이죠 그냥
그게 원래 워드였던 비주얼 인풋이었던
상관없이 그냥 여기서부터 똑같이 돌릴
수 있는 거예요
그래서 이게 이제 아까 제가 붙었던
그림인데 그 우리 알고 있는 그림이죠
얘를 가지고 멀티 헤드 어텐션 한
다음에 그
mlp를 붙여주는 그리고 거기에
커넥션이 있고 이거를 앨범 반복하고
지난 시간에 배웠던 그대로죠 위에는
똑같아요 이렇게 하고 얘를 이제
여러번 반복하고 나면은 여기
식선하는데
레이어논 한 다음에 이게 아주
세부적인 부분은 조금 다를 수도
있어요 근데 그거는이 사람들이 여러
가지를 실험해 보다가 이렇게 하는게
조금 더 낫다 해서 바꾼 건데
큰 의미는 없어요 그래서
본질적인 차이는 거의 없을 거예요
이렇게 해서
멀티 헤드 셀프테이션 돌고
mlp 한번 돌고 이거를 여러 번
반복하고 여기 지금
l이 붙어 있는데
l이요 라지 l에 대한 인덱스에요
그래서 지금 제가 맨 처음에 제로라고
했는데 이게
트랜스포머 인코더로 아직 한 번도
통과하지 않은 인풋이란 뜻이고요
얘를
요거 요거 통과하고 나면은
처리하고 거기다 열고 들어가서 제
1이 나오겠죠
쭉 돌고 나면
C 라지 l이 나오겠죠
이게 로테이션이 잘 논문에 있는
로테이션을 따라가서 그런데
지난 시간 수업에서는 이거를 그
슈퍼스크립트를 썼었어요 괄호하고
l이라고 썼었어요
기억나세요 그게 아마 지난 시간 강의
노트랑 이게 좀 달라 가지고
혼동될 수 있는데이 l이 레이어의
개수예요
어디까지
엘개를 통과해서 나온 인베딩이란
뜻이에요
그렇게 해서 앨범 다 돌고 나오면요이
클래스
토큰에 들어가서 나와 있는 얘가 가장
바이어스가 안 돼 있는 전체 이미지를
균등하게 잘
결합하고 있는게 되겠죠
요거 위에다가 mlp 쌓아가지고
프레스파이어 달아주면 얘가 이제 어떤
클래스에 해당되는지를 예측하게 할 수
있죠
그러면은
로스는 어디서 발생해요
로스는 여기서 발생하겠죠이 예측이
틀린 거에서 발생하겠죠 그럼 이거
다시 쭉 타고 내려와서 전체를
백프로포션 해가지고 싹트게이밍을
해주는 거예요
다시 한번 얘기하면이 윗부분은 지난
시간에 배운 거랑 완전히 똑같아요
거의 차이가 없어요 뭐가 달라졌냐면
얘는 어쨌든
시퀀스 오브
토큰이 들어와야 돼요
토큰 인베딩이 들어와야 돼요
그러면은
각각의 토큰이 무엇이 되어야 될
것이냐 이미지는
pvip로 쪼개는 조그만 이미지
패치들이 그 워드 역할을 해서
컴포넌트 역할을 해서
걔네들이 들어가야 된다 그러면은 그걸
이제
인베닝으로 만들어야 되잖아요 픽셀
레벨에서 그냥 넣을 거 아니니까 그럼
너무 크죠 그래서이
D 차원짜리 인베딩으로 만들어 줄
건데 그거 어떻게 만들 거냐 그냥
리니어 맵핑 시켜준 거예요 그냥
매트릭스나 곱해가지고
그러면이 매트릭스는 모든 애들한테
공통적으로 적용이 되니까이 픽셀
레벨에 있는 표현을요 인베딩으로
표현하는 일반적인 방법을 배우겠죠
저게
그거의 내용을 가장 잘 담고
뒷차원으로 보낼 수 있는 방법을 배워
놓겠죠
됐나요
대충 어떻게 돌아가는지 아시겠어요
요게 이제 가장 핵심이 되는
아이디어였고 이것들의 이제 변형들이
오늘 계속해서 나올 거예요
자 그래서이 vit는
실험을 돌렸어요이 그 이게 나오기
전까지
CNN 중에 가장 잘 됐던게 뭐
레지넷인데
레지넷 중에 제일 큰 거 152 얘랑
이제 비교를 했는데 그
결과를 보시면은 뭐 정확도가 잘
나온다 지금이 모든 데이터셋들에서
기존에 있던 그
데이터셋들을 이거를
얘가 이제 그
레지넷으로 만든 기존 건데 그거보다
정확도가 더 잘 나온다 좋아요 성능
좋아진 건
좋은데요 부분을 한번 보세요
tpu v3 코어 데이즈 이게 무슨
말이냐면
tpu라는 말 혹시 들어보셨나요
gpu는 많이 쓰죠 우리
tpu는
텐서 프로세싱 유닛이라고 그이 진짜
딥러닝 연산을 하기 위해서 구글에서
만든 하드웨어에요
gpu를 훨씬 더이
gpu는 원래 그래픽 카드잖아요
그래픽을 표현하기 위한 거를 우리가
연산에 쓰는 건데 이건 진짜이
연산만을 위해서 만든 특수한
하드웨어에요 그래서
굉장히 비싸고 이거를 팔진 않아요
구글에서만 갖고 있고
구글 클라우드라는 서비스를
돈을 내고 사용할 수 있어요 그
aws랑 비슷하게
근데
이거를 지금 보니까 이거 이제 버전
3를
2500시간을 써야 돼요
2501을 써야 돼요
그러니까 이게 8개를 쓰면 300일
정도로 돌려야 되는 거예요 자 이거를
우리가 돈을 내고 하면 얼마가
되느냐이 이게 좀 오래된 거긴 하지만
여기 들어가 보면 1시간에 8불 내야
된다고 써 있어요 하나 쓰는데
그러면은
8불곱하기 24시간 곱하기 2500
하면은이 모델 하나 트레이닝 하는데
들어가는 돈이 우리 돈으로 한
5억에서 6억 정도 되는 거예요
이 모델 한 번 쫙 트레이닝 하는데
여러분들 그 과제 해보시면 알겠지만
모델을 한 번만 트레이닝 하면 되는게
아니죠 하프파라미터 튜닝도 해야 되고
모델 크기도 다르게 해보고 데이터도
이것저것 해보고이 표 채우는데만 해도
지금 뭐 수십번 했겠죠 어마어마한
돈을 태우는 모델이에요
이게 뭐
구글이 가진 거니까 공짜일 수도
있지만 사실 거기 들어가는 전기값과
뭐 그 시설 임대료 이런 것들을 다
내야 된다고 생각하면은 아무리
구글이라도 이게 무시할 만한 돈은
아닌 거고
다른 회사들이 이걸 하는 거 다
마찬가지예요이
딥러닝이 굉장히
어떻게 보면 좀 비판하는 이유 중에
하나가 되게 쉽고 인간에게는 되게
자명한 태스크를 컴퓨터한테 억지로
시키면서
엄청난 양의 전기와 그 에너지를 쓰고
있는거다 뭐 탄소를 엄청나게 배출해
가면서 이런 얘기가 나오는게 바로
이런 것 때문이에요
라지 모델들이
뒤에 이런 불편한 진실이 있어요
자
그러면이 모델 이런 걸 이제 왜
했느냐 보시면
vit가 이게이 논문이 처음 나왔을
때만 해도 그렇게 완벽하지 않았어요
얘가 언제만 잘 되냐면 아주 큰
데이터셋의 트레이닝을 했을 때만 잘
된다는 거예요 여기 그림 보시면은요
동그라미들이 다 이제 vit고
네모나게 되어 있는게 베이스라인인데
이미지넷은 원밀리언 비디오에요
이미지에요 이미지가 100만 개 있는
데이터 쓰시고 이거는 그거에 21배
커진 거죠
21배 아니죠 이게
클래스 개수가 1k에서 21k로 커진
거고 이미지 개수는 정확히 몇 개
늘었는지 모르겠어요 그리고 jft가
300m이라는 개수에서 보듯이
이거보다 30배가 큰 300배가 큰
데이터셋이죠
여기다 트레이닝을 했을 때만 겨우
이겼어요 베이스라인들을 여기서는 지금
택도 없이 쥐고 있어요 다
그러니까 이렇게 어마어마하게 큰
데이터셋에다 트레이닝을 해야만
기존에 있던 cnn을 이길 수 있는
거예요 왜 그럴까이 모델이
cnn보다 그래서 좋다는 거냐
나쁘다는 거냐라는 거에 대한 어떤
결론을 내야 되겠죠 자 왜 차이가
나느냐면요
vit 우리가 지금 배운 트랜스포머
모델은
기본적으로 인덕티브 바이러스가 없어요
인덕티브 바이러스가 뭐냐 우리
cnn이 왜 좋다 그랬어요 수업할 때
이것 때문이었죠 스페셜 로컬리티랑
포지션을 인베리언스 때문에 cnn이
동작한다고 배웠어요 이게 무슨 뜻이냐
어떤 비주얼한 패턴을 파악하기
위해서는 우리 주변에 있는 픽셀들만
보는게
cnn이었어요 그리고 그거를
여기저기다가 똑같이 적용할 수 있는게
우리가 기본적으로 깔고 있는 cnn의
가정이죠 그래서 잘 동작했었다라고
우리가 지금까지 배우고 왔어요
근데 이후 트랜스포머 모델을 한번 잘
생각해보세요 내가 어떤 패치예요 어떤
주인공이에요 여기서 하는 일이 뭐예요
나를 표현하기 위해서 이미지 안에
있는 다른 모든 이미지 패치들과
시뮬레이트를 계산해서 나를
업데이트하죠 나뿐 아니라 다른 애들도
다 똑같은 그걸 하고 있죠
로컬리티 있어요
없죠 전체를 다 보고 있죠 모든
애들이 모든 토큰을 어텐션을 하니까
그 말은 스페셜 로컬티를 활용을 안
하고 있다는 얘기죠 전체를 다 보는
거예요 자 그 왜 그렇게 하느냐
가까운데만 봐도 되는데
근데이 논문이 얘기하는게 뭐냐면
그렇게 가까운데만 보게 안 하고 다
보게 해도
데이터셋이 충분히 크고 충분히 오랜
시간 동안 충분히 큰 모델을 학습을
시키니까
성능이 더 잘 나오더라 해요
성능이 더 잘 나오는게 무슨 의미냐면
가까운데만 보호라고
했을 때보다 더 잘한다는 거는
얘가 그걸 깨우쳤다는 얘기에요
진짜로 깨우쳤느냐 하고 예제를 봤더니
자이 강아지를 맞추기 위해서 얘가
어디에 어텐션을 하고 있는지 우리
그때 그 스페셜 어텐션 할 수 있는
거 배웠죠 그거를 가지고 한번 찍어
봤더니 이게 강아지라는 걸 맞추기
위해서 딱이 부분을 본다는 거가
나왔어요 이런 식으로
어떤 부분을 봐야지 우리가 저
레이블을 맞출 수 있는지를 정말
귀신같이 맞춰네요
근데 이걸 하기 위해서 너이 근처를
봐라라는 걸 우리가 가르쳐 주지
않았어요
그렇기 때문에 아주 비효율적인 거죠
저거를
정말 많은 이그제플을 보다 보니까 아
가까운데만 보면 대부분 되는구나라는
걸 배우는 거예요 그래서 아주 큰
데이터셋을 학습시켰을 때만 잘
동작한다라는게 특징이었어요
근데
그러면
cnn만큼만 잘 되는게 아니라 왜 더
잘 되느냐
간혹 드물지만 어떤 경우에는
근처만 보면 답이 안 나오는 경우도
있을 수 있죠 이미지에 따라서
멀리 있는 것들이 힌트가 되는 경우가
있을 수 있죠
그런 경우도 얘는 캐치할 수가 있는
거예요
cnn은 아예 우리가 그걸 못 보게
하죠 딱 주변만 보게 하죠
근데
얘는 알아볼 수 있게 해놨기 때문에
그게 필요하면 얘가 그걸 찾아내는
거예요
그래서
정말 충분히 데이터에 학습을 시켜주면
그
성능이 cnn보다 더 좋아진다 그래서
이런 인덕티브 바이러스를 우리가 주지
않아도 얘가 어느 정도 중요하다는 걸
배울 수 있고 그거에 예외 상황까지도
캐치할 수가 있어서 더 잘 되는 거
같다라는게이
논문에서 낸 결론이었어요
대단하죠 이런 걸 이렇게 했다는게
이 1은요 이거 어떻게 보면 되냐면
1에 있는요 벡터는 나머지 모든
것과의 시뮬레이트가 이렇게 나왔다는
거예요 1 자기 자신이 제일 높게
나오고요
노란색으로 그 다음에 좀
연하게 나오고 나머지는 진하게 나오고
뒤로 갈수록 더 짙어지죠 이게 무슨
말이냐면 1에 있는이 자리는
로우 1에 있는 것들이랑 컬럼 1에
있는 것들이랑 비교적 더 쓰밀러하고
나머지들이랑 다르게 나온다는 거예요
다른 것들도 마찬가지예요 지금 뭐 5
3 이런 거 보면은
얘도 딱 자기 자리에 있는 거랑 가장
좋고 같은 로우 같은 컬럼
근처로 근처 컬럼 순으로
시뮬런트가 떨어지고 아닌 걸로 갈수록
확 떨어지고
이게 우리가 지금이
포지셔널 인코딩이 야 너는 2 3이야
이런 거를 가르쳐 주지 않고 그냥
아무렇게나 만들어 놓고 배워 이랬는데
딱 귀신같이 이렇게 찾아냈다는 거예요
자기 자리하고 자기 로우 잘 컬럼이
중요하다는 거를
그래가지고 이런 2D
구조를 우리가 인위적으로 주지 않아도
얘가 이렇게 충분히 잘 배워낼 수
있다라는 거를 실험적으로 증명을 했고
그래서이 이후로 비전트랜스포머에서는
포지션 인코딩을 그냥 이런 식으로
해요
런업을 하게 딱 주고 알아서 배워
이렇게만 하고 있어요
nf보다 훨씬 간단하죠 사실
자 여기까지가 이제 가장 처음에
나왔던 vit
모델이었고요이 vit 모델이
완벽하지는 않았어요 뭐 가장 큰
단점이 이거였죠
돈이 많이 들고 시간이 많이 걸린다
그거를 어떻게 좀 개선해 볼까라는게
다음 질문이 되겠죠 자연스럽게 그래서
데이터 efficient 이미지
트랜스포머라는게 그 다음에 나오게
되는데
얘네들이 이제 주장하는 거는 우리는
8개 gpu가 있는 싱글 노드 하나요
정도는
요즘 이제 대학원들도 하나씩은
충분히 이거 하나가 아니라 여러 개씩
가지고 있는게 표준이 될 정도로 뭐
그렇게까지 대단한 장비가 아니죠 이제
그러니까 학교에서도 할 수 있는
정도예요 학교에서도 한 이사벨 정도
돌리면 할 수 있다 그리고 데이터셋도
jft라는 데이터셋은 공개가 안 돼
있어요
구글만 가지고 있는 데이터 쓰세요
그런 거 안 쓰고 그냥 공개되어 있는
이미지 넷만 가지고 해도
성능 잘 나오게 만들 수 있다라는게이
논문에
핵심적인 컨트리뷰션이에요
자 그 아이디어는 뭐냐
디스틸레이션이라는 걸 해요
디스플레이션이라는게 뭐냐 우리가 그
cnn으로는
굉장히 이제 어느 정도 잘 동작하는
사실 그 트랜스포머 vit로 만든
거보다 조금 못하다곤 하지만 거의
비슷한 거를 cnn으로 훨씬 빨리
만들 수 있는 거 우리 알고 있잖아요
그래서 같은 거 그런 걸 만들어서
그거를
쓰는 거예요 모델 구조 보시면은
인풋이 들어가고요
스튜던트 모델이 우리가 학습하고 싶은
모델이에요
얘가
어떤 예측을 내놓으면 이렇게 분포가
나오겠죠 클래스 별로 그리고 정답이
있겠죠
정답이랑 맞춰 가지고 요거 중에 제일
높게 나온 거를 이제이 모델이
예측이라고 치고 그 정답에 있는 거랑
맞춰봐 가지고 백프로 파는게 우리가
흔히 알고 있는 일반적인 학습
방법이죠
이제이 비전트랜스포머를 우리 원래
하던 것처럼 학습을 시키는게이 아래쪽
녹색 부분이에요
근데 이것만 하면은 이제 데이터가
적고 그 gpu를 꼈으면 성능이 안
나오니까이 윗부분을 추가한 건데
윗부분이 뭐냐
티처는
얘보다 더 크고 더 잘 동작하는
모델이에요 주로 그냥 cnn을 써요
잘 돌아가는 cnn을 써요
얘가 예측을 하게 하면은
어떤 레이블이 또 나오겠죠
자 이게
훨씬 더 큰 데이터셋에 더 학습되어
있고 이미 잘 돌아가는 걸 알고 있는
모델이니까
얘가 내놓은이 확률분포 자체가 좀
정답이 근접하겠죠
그거를
얘랑 맞춰보게 하는 거예요
얘가 예측한 거랑 이거랑 서로
비슷해져야 한다는 로스를 추가해
가지고이 선생님이
학생이 원래 기본적으로
데이터만 보면서
데이터만 보는 거 사람으로 치면 책만
보면서 공부하고 있고 선생님이 옆에서
같이 풀어보고 야 나는 이렇게
풀었어라고 주는 거를 같이 흉내내는
것을 동시에 진행하는 거예요
요게 디스플레이션이에요
자 그래서
모델이 어떻게 동작하냐면요 우리
모델은
vit랑 똑같아요
완전히 똑같은데
딱 하나만 다른게
맨 오른쪽에
디스플레이션 토큰이라는 거 하나가 더
들어가요 우리 지금 vit에서 이미지
패치들이 쭉 들어오고 앞에다가
크레스토큰 하나 붙였었죠 그런 거
하나 더 붙이는 거예요 뒤에다가
디스플레이션 토큰이라는 거를 그리고
똑같이 돌려요
그것만 달라요 그리고 나서 이제
위에서 뭐 하느냐
클래스토큰에서는 우리가
크래스피케이션을 하죠
그렇게 해가지고
크로스 엔트로피 로스 줘서 틀린 걸로
쪽백프로 파는게 우리 원래 알고 있는
그거죠 이쪽은 똑같은데
요쪽에선 뭘 하느냐 우리가 방금
얘기한 거 있죠 선생님이
얘기한 분포랑 같은지를 맞춰 보게
하는 거예요 그게 틀린만큼 로스를
주는 거예요 여기서도
그러니까
CLS 토큰이 사실상
이름을 하나는 클래스피케이션 다른
하나는 디스플레이션 토큰이라고 우리가
이름 붙인 거예요
자 이렇게 여러 개를 붙일 수 있어요
저렇게 추가 토큰을
그러면은요 윗부분에서 이제 제가 지금
하이라벨에서만 얘기를 했죠 내가 만든
분포랑 선생님이 만든 분포랑 맞춰보고
로스를 준다라고 얘기를 했는데 그걸
구체적으로 어떻게 하는지가 여기 지금
식으로 적혀 있는 거예요
제가 지금 말한 것처럼
분포끼리 맞춰보는 거가요 소프트웨이브
디스트레이션이에요
앞부분은 우리가 알고 있는 그냥
크로스 엔트로피죠이 y 정답이랑
얘가 hknn 그 우리 모델이
만들어낸 거랑 맞춰보는게 크로스
엔트로피고
뒷부분이 뭐냐면요 이게 오랜만에
나왔죠 KL 다이벌 존스 기억나세요
예전에 우리 초반에 배웠던 거 있죠
KL 다이버전스가 뭐였어요
두 확률분포 사이에 디스턴스 비슷한
걸 측정하는거다라고 정도 얘기하고
지나갔었죠 그게 지금 나온 거예요
우리가이
학생 모델이 만든 거랑 선생님 모델이
만든 거랑 두 개의 분포를 비교하고
싶은 거잖아요 그로수를 주기 위해서
그래서이 KL 드라이버를 여기다 쓴
거예요 예를 미니마이즈 시켜주면 그게
무슨 말이에요
학생 모델이 만들어낸 분포가 선생님
모델을 만들어낸 분포랑 가까워지게
만들겠다는 거죠
그래서이 두 개의 로스를 서로 이제
웨이티드 썸을 해준 건데 그래서 여기
이거의 가중치를 남다라고 하면 얘를
1-남자라고 해가지고 이게 전체
로스가 되는 거예요
하드 레이블 디스플레이션은 뭐냐면요
분포대 분포로 하지 말고
학생도 하나를 어쨌든 골라야 돼요
답을 하나 내야 돼요 우리 객관식
문제 풀 때 1 2 3 4 5번의
확률 저거 내지 않죠
답은 어쨌든 하나 써야 되죠 그리고
틀리면 틀린 거죠
그렇게 푸는 거예요 그래서 학생도
답을 하나 적어내고 선생님도 저 답을
하나 내고 그 둘이 맞았으면 맞은
거고 틀렸으면 로스가 나오고 이렇게
하는게 하드 레이블 디스플레이션이에요
어느 쪽이 더 잘 되는지 좀 이따
볼게요
그래서 이제
콜레스토큰 쪽에서 나온요 토큰에서
나온 인베이딩 있죠
요거를 클래스 인베딩이라고 부르고요
디스플레이션 쪽에서 올라와서 만들어진
예를 디스플레이션 임베딩이라고 부를
거예요 자 그랬을 때 결과를 실험을
해봤는데
재밌게도 하드가 소프트보다 더 잘
된대요 소프트가 사실 더 정보를 많이
주는 거잖아요 그 정답인거 하나
외에도 그리고
조금의 실수를 너무 로스가 크게 받을
수 있고 그래서 소프트가 더 잘 될
거라고 사실 생각하기가 쉬운데
의외로 하드가 더 잘 나왔다라는 실험
결과가 리포트가 됐어요
그리고
디스플레이션 인베딩이이 클래스
인버딩보다 성능이 더 좋대요 이게 더
유용한 정보가 많이 들어있대요 그게
나중에 너무나도 보세요 거기 막 예제
같은게 나오는데 좀 이것도 좀
흥미로운 사실이에요 실제 정답을 보고
배운 책을 보고 배우는 해보다
선생님이 가르쳐 주는게 더 도움이
됐다는게 근데 선생님이
궁극적으로는 얘보다 못한
선생님이거든요 이게 cnn이기 때문에
근데 어쨌든 그걸로 학습한게 더 잘
됐다는게 또 좀 흥미로운 사실인 것
같아요
그리고
얘네 둘이 배우는게 사실 되게 비슷할
거잖아요 어쨌든 크리스피케이션 하는
걸 배우는 거잖아요
그러니까
책에 있는 정답 보고 그걸 흉내내는
학생이랑 선생님이 가르쳐 주는 건
똑같이 흉내내는 학생이랑 같은 걸
결국 배우는 거잖아요
근데
똑같지는 않더라라는게 이제 뭐
실험으로 입증이 됐대요 그런 얘기고
그 다음에
모델이에요 여기서
얘가 선생님보다 결국 조금 더 동작을
잘 하더라 이게 지금 적혀 있는게
뭐냐면은 그
클래스피케이션이 두 모델 간의
d3가드 하는 거거든요 그러니까
그라운드 츄루스랑 d3가드 하는
거니까 이게 지금 그
틀린 비율이에요
근데 선생님으로 쓴 컴프레스는
17.1% 틀리는데
얘는 16.6% 밖에 안 틀려요 약간
더 잘해요 선생님보다 좀 더 잘하고
있고 그 다음에 이쪽도 보시면은이
디스플레이션을 해주게 되면은 그
디스플레이션 안 한 거보다 선생님이랑
더 잘 어글리를 한대요
재밌는 사실이에요 그
vit보다 못한 cnn을 선생님으로
두고
걔가 가르쳐 주는 대로 따라가는 거를
병행을 했더니 그거 안 한 거보다 더
잘한다는게 좀 흥미로운 결과였었어요
그리고
훨씬 더 빨리 학습이 되고 대신
선생님이 있어야죠 저 cnn을 미리
학습을 시켜 놓은게 있어야 된다는게
뭐 조건이 되겠죠
자 이렇게
dit를 간단하게 얘기를 했고요 이제
조금 더
요즘 실제로 더 많이 쓰이는 모델을
얘기해 볼게요
여러가지 문제점들이 있었는데 그 중에
하나가 방금 얘기했던
컴피테이션 코스트가 너무 많이 든다는
거였어요 그 이유는 인덕트리버바이스를
주지 않았기 때문이다라고 얘기를 했죠
그리고
그 이게 이제 사실 이거에 대해서
우리가 지금까지 얘기하지 않았지만
사실은 좀 불편한게 이미지를 그냥
주어진 대로 그냥 톡톡톡 자른다는게
그렇게 좋아 보이지는 않죠 저게 뭔가
의미대로 자르는 것도 아니고 그냥
우연히 16발 16으로 잘라 가지고
바로 인접한 픽셀인데 옆에 반으로
나뉘는 사람도 나뉘는 것처럼 이렇게
좀 인위적이라는 느낌을 지울 수가
없어요 이거를 좀 개선해 볼 수
없을까라고 해가지고 나온
아이디어들이이
스윙 트랜스포머라는 거랑
컨버션 비전 트랜스포머 cvt라는 두
개가 거의 동시에 나왔어요 둘 다
21년도 3월에 나온 논문이었어요
보시면
인덕티브 바이러스가 없어요 우리가
지금 했던 vit는
근데 얘네들은
인덕티브 바이러스를 다시 집어넣어요
그러니까
야 저거 되는 건 알겠는데 너무
비율적이야 좀 그래도 근처가
중요하니까 근처 위주로 봐 대신
계산량을 확 줄일 수 있어라는 거죠
그래서
요게 추가가 되고요 그 다음에이
패치가 항상 우리 딱 16발
16이라고 고정되어 있는게 좀
너무 인위적이잖아요 그 몇으로 잘라야
될지 우리가 정해야 되는데 그래서
이렇게 안 하고 이렇게 하면 이제 그
안에 들어가는 물체 크기가 딱 그만한
거 밖에 우리가 인식을 못하게 되니까
얘를 다양한 크기를 할 수 있게
점점 멀지 시켜 나가는 아이디어를
적용을 합니다
처음에는 16과 16으로 하는데 그
다음번에는 32바이 32로 커지고
그다음에 64가 64로 커지고 이렇게
그런 아이디어가 추가가 되고요
그 다음에 그
같은 패치 안에 있는 애들끼리만 지금
그 픽셀들끼리만 서로 리뉴얼 맵핑이
돼서 그 다음부터 걔네들이 같이 놀게
되죠 마치 그 우리 학교 다닐 때 반
나누면 다른 반 되면은 그 학생은
영원히 못 만나는 거랑 비슷한 거예요
근데
그렇게 되는게 좀 바람직하지 않죠이
원래 실제 이미지에는 바로 옆에
인접했던 픽셀이어도
다른 그 패치로 나눠져 버리면 서로
동작을 전혀 못하게 되니까 그걸 좀
반영해 주기 위해서
윈도우를
딱 그 정해진 크기로 딱 한 번만
나누는게 아니라
딱 절반씩
파티션이라는 걸 적용을 하게 돼요 좀
이따 볼게요
그리고 이제 마지막으로 뭐 상대적으로
좀 덜 중요한데
relative position
바이어스라는 개념이 나오게 되는데
이건 좀 이따 얘기를 할게요
스윙 트랜스포머에 아이디어 4가지가
이거예요 지금 vit가 가지고 있던
문제점들을 해결하기 위해서 이런
것들을 도입을 했는데 하나씩 한번
살펴볼게요
인덕티브 바이러스가 다시 추가가
된다고
얘기를 했어요 이게 무슨 말이냐
각각의 토큰들이 그 전체를 다 보는게
아니라 자기 근처에 있는 스몰
윈도우만 보게 되는 거예요
그래서 지금 각각의 이미지는 피버의
p라 그랬죠 아까는 16발 16이었고
얘네들은 4바이 4를 썼어요 더 잘게
쪼갰어요 그 대신
엠바이 m 패치가 들어가게 되는데
이게 무슨 말이냐 이미지를 우리가
이렇게 쪼갰죠 하나하나가 딱 피부에
p가 되도록 이미지를 쪼갰어요 아까랑
똑같이 그리고 이번에는
m이 이제 생기는데
아까는이 각각이 자기가 쿼리일 때
전체를 다 키벨로 해가지고 어텐션을
했었는데 지금은
mim짜리요
패치 윈도우 안에서만 보는 거예요
즉 얘가 커리면요 4개만 키 밸류가
되는 거예요
두 번째 커리어도요 4개만 되는
거예요 그다음 거가 콜이면 이렇게
3번 4번
컬럼 1,2로
요렇게 4개가
다음번에 키벨루가 되는 거예요
즉 저 윈도우로 저렇게 쪼개 놓고
다툼 윈도우 안에 들어가는 애들끼리만
어텐션을 해주는게 이거의 아이디어에요
지금 유아 윈도우 안에 있는
패치들끼리는
걔네들끼리만 컨텍솔라에서 하는 거예요
셀프 포텐션 할 때
됐죠
그래서이 안에 있는 그
패치가 패스가 아니라 패치예요
패치가
윈도우 안에 있으면 그게 커리면
셀프 텐션은 그 키 밸류가
윈도우 안에 있는 애들끼리만 가지고
한다라는 얘기고요
여기 있을 때는 마찬가지로이 안에
있는 거가 이제 콜이면요 안에 있는
것들끼리만 키벨로 쓰는 거죠 이렇게
하면 연산양이 확 줄어들겠죠
그 다음에 두 번째 아이디어는
파이어라 포커 스트럭처를 쓴다
그랬어요 이게 뭐냐
패치워징이라는 걸 하는데 아까는
피버의 피가 그냥 고정되어 있었어요
시작부터 끝까지 계속 피부에 피웠는데
이번에는 그렇게 안 하고요 이거를
이제
진행할 때마다
토바이투씩 이걸 묶어 줄 거예요
어떻게 되냐
처음에는 이렇게 이제 m이 이렇게
있었다면은요
각각이 이제 임베딩으로 표현이 되겠죠
CD m전짜리 어떤 벡터로 표현이 돼
있으면
얘네들을 컨텐츠인 다음에
어떤 플리커넥티드 레이어 하나를
통과를 시키고 아웃풋으로
4개가 붙었으니까 4c가 들어와서
그걸 절반인 ec가 되도록 만들어
줘요
그렇게 하고
얘가요네 개를 합친 거에 임베딩이
되도록
사용하는 거예요
그러면은요 과정을 한번 겪을 때마다
어떻게 되어 있어요 지금 전체가 8
곱하기 8이었는데
4x4로 개수가 줄어들고
각각의 크기는 두 배가 된게 되겠죠
그렇게 해서 그 CNN 때처럼 우리가
점점 이렇게 더 개수를 줄여
나가잖아요
합쳐 나가면서 그런 식으로
필드가 커져가는 식으로 가는 거예요
여기서 이해되세요
네
그래서
애프터를
요거 통과하고 나면 어떻게 되냐면요
패치 사이즈는 2P 곱하기 2p가
돼요
p 곱하기 피었던게 이제이 p*ep가
되고 그거의 크기는
cccc 4개 있던게 EC 하나가
남는 거고요 한번 더 하고 나면은 그
다음에는 4P 곱하기 4p가 되겠죠
이런 식으로 계속 머징해 나가는
거예요
그리고
m은 우리 앞에서 이제 슬라이드에서는
2였었는데 이거는 계속 그대로 있어요
다음번에 합쳐지고 나면은
4개짜리가 이제 하나의 그
벡터가 되죠
얘를 가지고
얘가 쿼리일 때 키벨류는 그럼 어떻게
되느냐
m 아까 그대로 요렇게 이제 이것도
두 배로 커지는 거죠 이렇게 그래서
얘가 커리면 여기가요 4개가 키벨로
쓰이게 되는 거예요
얘는 그대로 유지가 돼요 그래서 보게
되는 영역 자체는 넓어지죠 이미지
속에서
근데
계산해야 되는 넘버로 패치는 똑같아요
그렇게 유지가 돼요
그 다음에 세 번째 아이디어가
뭐였냐면
쉬프티드 윈도우 파티셔닝이라는
거였어요 이거는 그 우리가 이거를
인위적으로 잘라 놓다 보니까 사실
사진 옆으로 살짝 옆으로 찍을 수도
있는데 너무 우연히도 그렇게 찍혀
가지고 이렇게 딱딱 쪼개지는 거잖아요
그게 좀 마음에 안 들었던 거예요
이렇게요 형틀 대로 잘라져 가지고
바로 인접한 픽셀들끼리도
인터랙션을 못 하게 되는게 그래서 뭐
하냐면 윈도우를
1/2씩 옆으로 쉬프트를 시킨대요 잘
안 와닿았죠 그림 보시면 바로 알
거예요
m이 지금 요거 요거잖아요 요거
하나가 m이잖아요 그거 딱 반씩
옆으로 옮긴 거예요
그러면 이번에는 아까는 이렇게 4개가
묶여 있던게 이번에는 요렇게 4개가
묶이는 거예요
2번 3번 2번 3번이 묶이는 거고
4번 5번 2번 3번 여기도
4번 5번 2번 3번 이렇게 묶이는
거죠
자 그러면이 바깥에 있는 데는 어떻게
하느냐
얘네들은요 바깥에도 이렇게 하나를 더
추가해요
그러면은 비어 있는 것들이 있고
차 있는 것들이 있죠 그래서이 비어
있는 내용이 없는 부분들은 마스킹을
해줘요 마스킹을 해 가지고 있는
것들끼리만 컨텍솔라에서 할 수 있게
처리를 한다라고 나와 있는데
요거는 좀 인플미테이션 디테일이라서
논문 한번 보시면서 어떻게
구현했는지는 보시면 좋을 것 같아요
기본적인 아이디어 여기서 중요한 거는
이거를
딱 정해져 있는 대로 끝까지 가는게
아니라 반 딱 시프트 시킨 거 한번
하고 다시 돌아와서 하고 이걸
번갈아가면서 해서
인접해 있는 애들끼리 어쨌든 같은
같이 한 번씩은 포함될 수 있는
기회를 계속해서 주는 거예요
됐죠
자 그래서 이거에도 전체 아키텍처를
한번 보면요 이거 보시면 어떻게
돌아가는지 좀 알 수 있는데 자 잉크
크기가
h 곱하기 W 곱하기 3짜리 이미지가
들어왔다고 칠게요 224 곱하기
224 곱하기 3 이런게 들어와요
처음에
패치 파티션이라는 걸 하게 돼요
여기서 뭘 하냐면은
얘네는 4 곱하기 4로 나왔다 그랬죠
pvp로 지금 쪼개는 거예요 이쪽에
놓고
각각의 패치는 그러면은 16개의
픽셀과 3개의 RGB 값이 있으니까
총 48개의 디멘션을 갖게 되죠
그래서
크기는 1/4 곱하기 4분의 w가
되고
각각은 48d 면전이니까
얘의 텐서 크기는 이렇게 바뀌는
거예요
이거 논문만 보고는 저는 진짜
파악하는데 좀 시간이 걸렸는데
이해되시죠 자 이렇게 되고 그런
다음에 이제 스테이지 1부터 4까지는
똑같은 걸 할 건데 여기서 뭘
하냐면은 리니어 인베딩을 해줘요
리니어 인베딩은 뭐냐면은이
4분의 h 곱하기 4분의 w가 각각의
그 지금 패치 크기들인데
패치
하나하나마다이 48개짜리 픽셀
값들을 우리가 원하는 어떤 cd면전
벡터로 보내는 거예요
리니어 맵핑 해가지고 아까 우리
vit랑 똑같이 그래서 이제 48이랑
값과 관계없이 그냥 어떤 임의의
cd맨전 벡터가 되는 거예요 각각이
그 다음에
스윙 트랜스포머 블록에 들어가게 되면
여기서 뭐 하냐면은 그
셀프로텐션 하는 거예요 그래서 자기
자신을 다른 애들의 웨이트 서버로
표현하는데 아까랑 다른 점은 그 자기
영역 안에서만 본다는 거고 mvm짜리
크게 안에서만 본다는 거 그거만
달라지고 그냥 이건 VIP 똑같이
도는 거예요
크기는 안 바뀌겠죠이
트랜스포머는
크기가 나와요 이제부터
똑같아요
패치 멀징을 한번 해주는데 여기서부터
이제 패치 몰딩 해주게 되면 우리가
패치가
투바이투가 하나로 묶인다고 그랬죠
그래서
크기는
8분의 h 8분의 w로 반이 줄어요
두 개씩 묶었으니까 로우 두 개 컬럼
두 개 하나로 묶였으니까 그리고
cd맨전이 대신이 CD 면전으로
커진다 그랬죠
C 4개 합쳐 가지고 FC 하나
통과해서 ec로 한다 그랬죠
그래서 ec가 됐어요
됐죠이 뒤는 이제 다 똑같아요 여기
스윙 트랜스포머 돌면 똑같고
패치 몰딩 한번 해주면 크기 또
반으로 줄고 이건 2배가 되고 여기도
똑같고 또 크기 반으로 줄고 두 배가
되고
똑같고
됐죠
자 여기서
밑에 이거를 이제 여러 번 한다고
되어 있는데 여기서 좀 주목할 만한
점이 곱하기 2 곱하기 곱하기 6
곱하기 이게 무조건 짝수예요
이걸 왜 짝수로 쓸까요
얘네는 아까 얘기했던 것처럼 그
쉬프트 안 시키고 그냥 하는 거랑
반씩 쉬프트 시킨 거를 번갈아가면서
한다 그랬죠 그래서 이게 짝수인
거예요 그래서 지금 여기 보시면은 그
요거 하나하나가 지금 그 저거죠
vit에서 하는 그 오퍼레이션인데
여기 wmsa라고 돼 있어요 이게
멀티 헤드 셀퍼텐셜 앞에 w는
윈도우라는 뜻이에요 그래서 우리가
윈도우 안에서만 보는 건데 그
윈도우를 우리가 이제 평상시에 하는
것처럼 1 2 3 4 5 6 7 8
이렇게 끄는 거 그게 일반적인 거고
반식 시프트 시킨게요 쉬프트
윈도우예요 그래서 2 3
4호 6 7 이렇게 묶어서 하는게
돼요
얘를 둘이 번갈아가면 돼요 지금 이게
짝수 방향 땐 이거 홀수 번역된 이거
이렇게 둔다고 돼 있어요
그래서 식으로 쓰면 이렇게 되고
그래서 이게 다 짝수 번인 거예요
그거를 공평하게 한 번씩 들어갈 수
있게 해주기 위해서
됐죠 레귤러랑 쉬프트 msa가 서로
얼터네이터가 돌아간다 이런 얘기입니다
정리됐나요이 모델은 굉장히 많이
쓰여요
성능도 좋았고 뭐 이후로도 좀
베이스라인으로 많이 쓰이는 모델이라
많이 보시게 될 거예요
자 마지막네 번째는 이제
포지션 바이어스인데 자 이게 왜
나오게 되냐 우리가
윈도우를 잘라 가지고 그 안에 있는
것만 가지고 어텐션을 하다 보니까이
포지셔널 인코딩을 넣는게 좀
애매해져요
그래가지고
절대적인 거를 얘가 배우게 하지 않고
얘는 상대적인 거를 배우게 한다라는
컨셉이에요 사실 그 정도만 이해해
두시면 돼요
디테일한 부분은 논문에도 제 자세히가
안 나와 있는데 그래서 이제 여기 할
때 이제 b라는 걸 더하고이 b라는
거는 m 제곱 곱하기 m제곱과 모든
그
윈도우 안에 있는 모든 애들끼리의
상관관계를 다 배워주는
매트릭스인데
얘를
뭘로 파라메트라이저 한다고 하냐면 그
EM
-1 곱하기 n - 2개 그
mvm짜리 윈도우 안에서 가질 수
있는 모든 상관관계의 범위에요
4개짜리다 그러면은 뭐 4 곱하기
4면은 이게
-3부터 플러스 3까지 밖에 차이가
안 나잖아요 그 안에서 차이가 날 수
있는게 그 관계를 배우게 해 가지고
얘를 가지고 prometize에서
이걸 만들어 준다 뭐 이런 얘긴데
디테일하게 어떻게 했는지는 사실 저도
이것만 읽어서 잘 모르겠고 코드를
아마 좀 봐야 될 것 같고 뭐 이런
여기서 중요한 거는 왜 이런 고민이
필요했고 왜 이렇게 바꿔야만 했는지
그거를 좀 상황을 이해하는 거예요
디테일하게 어떻게 했는지는 너무
보시면서 좀 파악해 보시면 좋을 것
같습니다
자 그래서
스위트랜스포머는
결국은 이거 속도 빠르게 하려고 한
거예요 전체를 다 보면 더 좋은데
그렇게 안 하고 부분적으로만 봐서 더
계산을 빨리 하고 싶어서 이렇게 만든
거잖아요
그래가지고 우리가 원래 알고 있던
멀티 헤드 셀프어텐션 하고이 윈도우가
붙어 있는 거에 타임 컴플렉스를
비교를 해봤어요 그랬을 때
자요 앞에 있는 4hw 시제곱은
뭐냐면요
qkb 매트릭스를 만드는 코스트에요
그래서 우리가 가정하기를 그
인풋 피쳐랑
qkv가 다 cd맨전짜리 벡터를
쓴다고 하면은요
얘네 다 리니어 맵핑이잖아요 그래서
C 곱하기 c가 다 필요하게 돼요
그리고 그런게 hw계가 있으니까
hwc 제곱이 나오게 되죠 이거
만드는데
근데
Q 해야 되고 K 해야 되고 V 해야
되고 그 다음에 마지막에 다시
원래대로 돌려 오는 5 하나 더 있다
그랬죠 그래서 w가 4개가 있었죠
그래서 4hwc 제곱이에요 이것도
한참 걸렸어요 전 이거 파악하는데
논문 보면
친절하지 않게 설명도 있어 가지고
아무튼 중요한 거는 이거는
원래 있던거나 이거
윈도우를 하나 똑같아요 어차피
qkb는 준비해야 돼요 우리가 이거에
있어서 이점은 없어요
오른쪽이 달라지는데 일반적인
vit 같은 경우에는요
코사인 시밀러리티를 이제 계산을 하게
되는데 그
벡터의 사이즈가 c이기 때문에 이런
걸 이제 hw만큼 있으니까
hwc만큼의 연산이 필요하게 돼요
근데 이제 그러고 나서 이거 웨이트를
할 때 또 한번
hc만큼이 필요하게 되죠
이 연산을 계속 ehwc만큼 해야
되는데 그게 그
hw계가 각각 다 한 번씩 쿼리로
쓰여야 되니까 그 곱해가지고 이렇게
나온 거예요
여기서 지금 뭐가 바뀌겠어요이
스윙 트랜스포머를 쓰면 뭐가
달라지냐면은
얘가 어텐드 하는 범위가 줄어들죠
hw만큼 봐야 되는게 아니라
앱만큼만 딱 보면 되기 때문에
hw 제곱이 m 제곱으로 바뀌게 돼요
근데 보통은 m 제곱이 hw보다 훨씬
작죠 hw는 아까 그 뭐냐
로우의 개수랑 컬럼의 개수예요
패치들이 쭉 나열되어 있는 보통 막
10개 뭐 이렇게 있을 텐데
m은 2 같은 거 썼죠 우리가
예제에서 이게 훨씬 더 작아지기
때문에
로컬하게 보는만큼 여기서 이제
계산량이 줄어들게 되는 거예요 뭐
그런 얘기에요 이거
디테일한 거는 이거 다시 한번 자세히
읽어보시면서 따라가 보세요 저도 이걸
파악하는데 한참 걸렸어요
자 요게
스윙 트랜스포머 모델이었구요 두 번째
모델이 이제 cbt라는 건데이
cbt라는 모델은
이 거의 비슷한 시기에 같이
만들어졌고 뭐 철학적으로는 사실
굉장히 비슷해요 그래서
앞에 거랑 조금 다른 방식으로 이걸
만들어 내게 되는데
얘는 컨버션을 좀 더 직설적으로
사용을 합니다 어떻게 하느냐 두 가지
모듈이 있는데
컨볼루션을 토큰 인베딩이라는 모듈은
그
cbt에서 이제 리사이징을 해주는
아까 같은 경우에는 우리가 그
c짜리 4개 붙인 다음에
FC 해가지고 ec로 만든다 그랬죠
얘는 대놓고 그냥 컨버전을 해요
이거 가지고 이거 만들고 이렇게 뭐
다음 거 만들고 쭉 이렇게 해서
만들고
진짜 말 그대로 컨버션을 해요 그래서
아웃풋의 크기도 그냥 이거예요
컨버전이랑 똑같아요 우리 봤던 거
스윙 트랜스포머에서 하는 그 패치
멀징이랑 되게 비슷한 걸 하는 건데
스윙 트랜스폼은 아까 어떻게 했다
그랬죠
연속으로 붙여 놓고 여기에 해당되는
애들 쭉 붙여 놓고
4개를 ec로 만들어 줬었죠 4c를
ec로 만들어졌죠 그거
프리커넥티드로 했죠
얘는 그냥 대놓고 콤보를 전환하는
거예요
근데 우리 수업에서 배웠었죠이
컨버션은 fc의 스페셜 케이스다
그러니까
결과 같은 거죠 f3로 할 거를 그냥
컨버션으로 했다는 거예요
그것만 달라진 거고 그래서 이거를
이제
트랜스포머 입장에서 보면 중간에
컨버션이 들어간 거지만 반대로 그냥
컨버션 원래 컨버션 네트워크였다고
생각하면은 반대로 이렇게 컨퍼런 원래
하는 거에 중간중간에 셀프어텐션이 더
들어가 있는 거라고 볼 수도 있어요
진짜 이거는 컨퍼런이랑 그
트랜스포머의 어떤 중간적인 모델이에요
그 다음에
컨솔루션을 트랜스포머 블록이라는게
있는데
얘도 우리가 그 qkb를 만들 때
원래 어떻게 만들었어요
그
wqwvwk 이거 곱해가지고
만들었었죠
곱한다는게 뭐예요
플리커넥티드죠
근데
곱하는게 아니라 얘네들도 컨버션을 할
거예요 그냥 그거예요
얘네들도 컨퍼런셜 필터가 되고 FC
웨잇이 아니라 그냥 컨버션이고 여전히
이거는 FC 스페셜 케이스이기 때문에
아무 문제가 없죠
그래서 모든 걸 그냥 컨버션으로 하는
거예요
여기 마지막에 하나 추가되어 있는 건
뭐냐면은
스퀴즈라는 거는
이 그 뭐죠 스트라이드 사이즈를
1보다 크게 해 가지고
펄쩍펄쩍 뛰어가면서 참조하게 해가지고
그
다음번 아웃풋 사이즈를 줄이는
메카니즘을 사용을 하게 돼요
그것만 좀 추가가 되게 되는데
얘 모델을 한번 살펴보시면은
자 아까랑 제가 똑같은 그림을 썼어요
일부러 이미지가 이렇게 들어오면은
얘를 그
첫 번째
conve 토큰 인베딩을 통과하게
되면 이게 결국 그냥 컨퍼런셜 하는
거예요 똑같이 그래서
얘가
컨퍼런스를 하고 나면 우리 사이즈
바뀌죠
h1w1 c1으로 바뀌죠 우리 이거
뭐 중간고사에서도 받고 많이 봤잖아요
사이즈가 바뀌게 되고 그 다음에
컨버지는 트랜스포머 블록에서는 얘는
그냥
트랜스포머 돌리는 거랑 똑같은데
거기서 하는 연산들이
폴리 커넥티드로 되어 있던게 전부
컨버션으로 바뀌기만 하고 다 똑같아요
그냥 얘도 사실상 그냥 그 트랜스포머
돌리는 거예요
그 뒤로 그냥 계속 똑같아요 요거
한번 할 때마다 사이즈는 바뀌어요
요거 할 때는 사이즈가 안 바뀌어요
트랜스포머니까 여기도 마찬가지로
사이즈 바뀌고 안 바뀌고
보시면은 컨퍼런저런 트랜스포머
블록이라는게 뭐냐면은
트랜스포머 블록처럼 생겼죠 모양은
근데요 셀프어텐션 할 때
얘네들의 연산이 컨버전인거에요 그것만
다른 거예요
자 여기서 하나 주목할 점은
맨 처음에 우리 몇 바에 몇 패치로
만드는 거 했었잖아요 항상
vit에서는 그게 없어요
그거 안 하고 그냥 바로 들어간
거예요 바로 컴포지션으로 하기 때문에
그걸 안 해도 돼요 그래서
non overapping 패치가
아니라 얘는 오블랙핑패치고요
얼마나 오버랩 될지 아니면 노노블랙
될지를 뭘로 조절하냐면
스트라이드 사이즈를 가지고 조절을
해요
실제 이제 아키텍처가 나와 있는데
패치 크기를 뭐 4로 하고 싶다라고
했을 때 지금 보시면은 이거예요
리사이징을 그 예를 가지고 하는
거예요이 스트라이드를 가지고
그래가지고 224바 224를 지금
56으로 만들고 싶은데 그거를이 p를
4로 명시적으로 해가지고 쪼개는
방식이 아니라
이걸 러프하게 4가 되게 하려면
슬라이드를 4로 하면 되죠 그리고
적절하게 그 패딩 해주면 이게 맞출
수 있죠
그렇게 해서 맞춘 거예요
4개에 한 번씩만 사용을 하니까 대충
1/4로 줄어드는 거예요
그렇게 줄여주고 이거 c는
vit처럼 트랜스포머가 들어가는데
여기도 그게 컨버지 있다 그것만 다른
거예요
대충 이해되시나요 너무
복잡한 이야기를 제가 한꺼번에 많이
하고 있는 거
같은데이 논문들을 한번 좀 읽어보세요
그 스윙 트랜스포머가 너무 굉장히 잘
썼어요 그거 꼭 읽어보시고
이
강의 다시 한번 보시면서 좀 개념 잘
잡으시면 좋을 것 같습니다
굉장히 많이 쓰이는 모델들이에요
한 15분 남았는데 이미지
했으니까 이제 비디오로 들어가 볼게요
사실 본질적으로 그렇게 다른 건
없어요
이미지로 만든 트랜스포머가 이름이
비전트랜스포머였는데
얘네는 비디오 비전 트랜스포머라고
해서
bbit라고 불러요 이런 모델이 이제
21년도 3월에
다른 사람들이 스윙 트랜스포머 하고
있을 때이 사람들은 이미지 이제
했으니까 비디오 해보자 해서 비디오를
했던 거 같아요
그
얘네들이 이제 모델을 4개를
얘기하는데 그 중에 첫 번째 모델
일단 가장 무식한 모델이에요
vit 아이디어를 그냥 이미지
크래플리케이션이 아니라 비디오
크래스피케이션이다 그대로 도입을 한
거예요 어떻게 하느냐 우리가 이미지
같은 경우에는 프레임을 그
피바이 필요 아까 나눴다 그랬죠
pvp짜리 토큰으로 쪼개는데 얘는
이제 로테이션만 좀 다르게 썼어요
어떻게 하냐면은
nw 곱하기 NH 개수
그러니까 이제 개수로 쪼개는 개념으로
얘는 그 카운터를 발견한 건데 그
위드 쪽이 n개 n nw게 화이트
쪽이 nhk가 되도록 쪼갠다라는
거고요 뭐 정사각형 같으면 저거
두개가 똑같겠죠
근데 그게 이미지가 여러 장이
있으니까
n틱의
패치가
요만큼이 있게 돼요 이렇게
NT 곱하기 nw 곱하기 nh가 있게
돼요
요만큼의 이미지 패치가 있는 거고
그것들을 그냥
트랜스포머에다 다 집어넣고
컨텍솔라에서 시켜 가지고
뽑아내는 거예요 그리고 아까 했던
거랑
똑같이이 그림 그대로죠 지금 이거 다
만들어 가지고 토큰으로 만들어 놓고
이거
계속 돌려 가지고 앨범 돌려 가지고
뽑아내면 클래스 나오는 거
그러니까 한마디로 말하면 이미지가
여러 장이잖아요
vit랑 똑같은데
vit는 거기 있는 이미지가 한
이미지 한 장을 쪼개는 것들이
들어갔었죠 그게 여러 장이 있는
거예요 그거 그냥 단 한꺼번에
집어넣고
싹 해가지고 여기 이거 뭐에 대한
비디오냐 이거 찾게 한 거예요
계산 내용 어떻게 될까요
h 쪽 재고 W
3개가 다 똑같으면 n의 6승
감당이 안 되는 시간이 걸리겠죠
어마어마하게 시간이 걸리겠죠 그래서
이제이 논문에이 흐름은 저렇게 하니까
정말 느리더라 이걸 어떻게 하면 더
빠르면서도
성능이 안 떨어지게 만들 수 있을까에
초점을 맞추게 돼요 비디오다 보니까
그래서 이제 처음에는 좀 무식한
아이디어를 몇 개 내는데 이런 거죠
프레임 다 쓰지 말고 몇 번에 한
개씩만 쓰자 두 번에 하나씩만 쓰자
짝수번 프레임만 쓰자 이런 거예요
1번하고 3번만 쓰고
짝수 번호 버리는 거예요 이렇게
유니폼 하게 프레임을 샘플링 해서 쓸
수 있어요 이게 시간 간격이 좁으면
어차피 되게 비슷하잖아요 그래서 그냥
몇 개 한 번씩 띄엄띄엄 쓰자라는게
첫 번째 아이디어고요 두
번째는이
튜블렛이라 그래가지고 이제
인접해 있는 프레임 예를 들어
5장끼리 같은 자리에 있는 걸
한꺼번에
x1이라고 만들어 쓰는 거예요요
픽셀들을 다 모아 가지고 이렇게
해주면은
5장이 한꺼번에 하나로
줄여주는 효과가 있겠죠 이런 무식한
시도들을 했고요
효과가 조금 있었다고 하고 이건
중요한게 아니고
모델을 3개를 더 만들어요 어떻게
하면은 저거를 무식하게 모든 패치들을
다 컨텍솔라 이제 한꺼번에 하는게
아니라 좀 더 효율적으로 할 수 있는
방법이 있을까
해서 나온게이
백토라이즈 모델 모델 2에요 이거는
이게 사실 이제 가장 좀 그
직관적이고 좀 좋은 모델인데 어떻게
되는지 한번 보시면요
스페셜하고 템퍼럴이 2단계로 가요
인풋으로 들어올 때 이미지가 여러
장이 들어오잖아요
이미지 하나하나가 스페셜 트랜스포머
인코더에 들어가요
요거는 우리가 아까 봤던 그냥 이미지
vit랑 완전히 똑같은 거예요 이미지
한 장 한 장 단위로 얘를 모델링을
하는 거예요 그냥 vit로
그리고
얘가 그
CLS 토큰에서 나오는게이 이미지
전체를 표현한다 그랬죠 아까
그게요 이미지를 표현하게 하고
그러면은 그 이미지 벡터가
쭉 시퀀스로 나오겠죠
그게 들어가는게 두 번째 있는 템퍼럴
인코더에요
이해되세요
그러니까 아래쪽에 있는 거는
vit구요 위에 있는 거는 우리가
지난 시간에 배웠던 그냥 진짜
제너럴한 트랜스포머예요
시퀀스 오브 썸띵이 들어가잖아요 지금
시퀀스 프레임 인베딩이 들어가잖아요
그래서 그냥 트랜스포머 돌려주는
거예요
그래서
스페셜한 거랑
템포를 한 거를 이렇게 쪼개 가지고
스페셜한 거 먼저 해서 인벤딩 한번
해 놓고 올라가서 템포를 하게 보게
하는 식으로 이걸 만들어 놨어요
그래서
타임콤프레스티가 어떻게 줄어들게
되냐면 시간
쪽이 따로 빠져나오면서 아래쪽이 지금
vit랑 동일하게 얘네 4승이 되고이
템포러란 쪽이 n 제곱이 돼 가지고
요거 두 개 더한 만큼이 되게 돼요
아까 했던 얘는 6승보다 훨씬
빨라지겠죠
됐나요
요게 두 번째 모델이고요
두 개를 더 시도했는데 세 번째
모델은이
백토라이즈 셀프어텐션이라고 해가지고
이것도 이제 그림 보시면 조금 더
이해하기 쉬운데 그
토큰인 베딩이 들어오면요
이게
스페셜한 셀포텐션 블록이 있고
템포러란 셀프테이션 블록 있고 여기
두 개를요 내부에서 나눠서 하는
거예요
셀프어텐션 할 때
스페셜 한쪽만 먼저 보고 한번 이렇게
해서 자기를 업데이트 해주고 원래는
이게 이게 없을 때는 전체를 다 보죠
근데 얘는 같은 프레임에 해당되는
것만 먼저 봐서 자기를 한번 업데이트
해주고 그 다음에 같은 자리에 있는
다른 시간에 있는 거를 한번 쭉 보고
업데이트 해주고
요렇게 반복되게 만들어 놓은 거예요
이걸 두 개 내부에서 쪼개서
이것도 괜찮은 아이디어죠
스페셜이랑 템포를 쪼개는데
스페셜 먼저 다 끝내고 템포를
한꺼번에 하는게 아니라
각각 패치 안에서 자기 자신을 할 때
스페셜하게 어텐션을 한번 해주고
템포를 하기 어텐션 한번 해주고
요거를 번갈아가면서 하는 거예요
자 여기는 이렇게 하면은
CLS 토큰을 넣는게 조금 애매해져요
얘는
스페셜은 어디에 속해야 되고 템포러는
어디에 속해야 될지가 되게
애매하잖아요
얘는 이거를 못 넣는다는게 좀
단점이에요
그 다음에
4번은 우리가
멀티 헤드 셀프로텐션을 하니까 그
헤드를 쪼개자라는 아이디어에요
헤드를 몇 개는 스페셜 용으로 쓰고
몇 개는 템퍼럴 용으로 쓰자 그냥
그거예요
식은 되게 복잡하게 써 있지만
그렇게 해주면은 어쨌든 같은 개수의
헤드를 합쳐서 쓰게 되니까 근데
각각의 헤드가 전체를 어떻게 하는게
아니라
얘는 스페셜만 보고 얘는 10%만
보니까
계산량이 줄어들겠죠
그래서 모델을 지금 제가 4개를
소개를 했는데
결과를 보면요
무식하게 다 하는게 어쨌든 성능은
제일 잘 나와요 시간을 오래 걸리지만
시간은 제일 오래 걸리는데
플러스도 제일 많은데
성능은 어쨌든 제일 잘 나오고요 두
번째 모델이 있었죠
스페셜 먼저 쭉 해서 피쳐 뽑고 그거
가지고
템포를 가는 거가이
성능도 나머지 3개 중에 제일 좋고
시간도 가장 적게 걸리고 가장
효율적이에요 그래서 보통 bbc라
그러면은이 모델 2를 가장 많이
생각을 하고 많이 사용을 해요
자이 비빗의 문제점은 뭐냐면요
vit는 아까 굉장히 큰 데이터셋에
대해서
학습을 시켜야만 잘 돌아간다라고
얘기를 했는데
문제는 비디오는 그렇게 큰 데이터셋이
없어요
비디오 개수 기준으로 봤을 때
커봤자
텐밀리언이 안 되어 지금 이미지는 뭐
빌리언 단위까지 가는데 그래서
근데 얘가 배워야 될 건 훨씬 더
복잡하잖아요 배워야 될 패턴이
그래가지고
vit로 먼저 이니셜라이즈를 해놓고이
모델 2의 장점이 그거예요
얘는이 안에 있는 이미지 쪽을 스페셜
쪽을
프리트레인지 모델을 그냥 갖다 쓸 수
있다는게 장점이에요
얘가 그냥 이미지 vip니까
그래 가지고
그래서이 모델 추가 좀 트레이드
오프가 좋기도 하고 저거를
갖다 쓸 수도 있어서 좀 많이 쓰인다
이런 얘기입니다이
논문에서도 5가지 모델을 얘기를
했는데
맨 왼쪽 거는 그냥 기존
vit고이 4개 중에
앞에 거 두 개를 우리가 방금 봤던
비빔 모델이랑 거의 똑같아요 그리고
뭐 새로운 거 두 개를 했는데 이것도
그림으로 보시면 조금 더 이해가 될
거예요
이 파란색이 컬이에요 내가 지금 쿼리
주인공인데
어디를 참조하느냐에요 그냥
vit 같은 경우에는 같은 이미지
안에 있는 걸 다 보는 거죠
얘네들이
키랑 밸류가 되요
비비 모델 3번은 뭐였냐면요
스페셜하게 보고 그
템포를 하게는 같은 자리에 있는 것만
보는 거예요 연두색이랑 빨간색 그거를
번갈아가면서 보는 거였죠
요게 비빔 모델 3번이었고요 얘네들도
이런 다른 이름으로 이걸 해놨고 그
다음에 뭐
스파르스 로컬 글로벌어텐션이라고
그래가지고 이게 한칸씩 띄어서 이렇게
보는 것도 뭐 이런 식으로 좀 다양한
트릭들을 써봤어요 근데 이제 그림
보시면 알겠지만 뭐 그렇게 크게 다를
건 없어요 사실
얘도 뭐 XG 어텐션에서 가로 쪽으로
세로 쪽으로 시간적으로
각각 같은 줄에 있는 것들만 보고 뭐
이런 식으로 하는데
성능이 그렇게 다르지는 않아요
네 이렇게 하고 오늘의 마지막
모델까지 왔어요
mvit인데
요거는 아까 우리 CBT 봤죠 이미지
쪽에서
컨버지는 다시 도입해 가지고
효율적으로 만들었던게 cbt였죠 그
아이디어를 그냥 비디오로 가져온
모델이라고 보시면 돼요
얘는
멀티 헤드 풀링 어텐션이라는 거를
사용을 하는데 여기 보시면
인풋이 들어오면 얘를
커리 키 밸류로 만들게 되죠 우리가
그렇게 해서 만든 거를 원래 그냥
쓰는데 얘는 지금 보시면은 지금
타임 쪽 그 다음에 화이트 쪽 위드
쪽에
크기가 바뀌어요 우리가 원하는 숫자로
바뀌는 거예요 그거 디멘션 리덕션
해주는 오퍼레이션이에요
저걸 써 가지고
크기를 줄여주는 거고 그 다음에
쿼리 키 밸류 가지고 우리가 그
셀프어텐션 할 때 저거 줄어든 크기로
하는 거예요 그래서이 이후로는 다
그냥 cbt에 있는 아이디어 그대로
갔다고 보시면 되는데 그걸 제가
여기다 지금 그려놨어요
요게 아까 우리가 봤던 CBT
모델이죠
색깔도 그대로 가져왔어요
이게 지금이 모델에 있는
mvit 아키텍처에요
자
데이터가 일단 들어오고요
큐브 1이 아까 거기 있던 컴퓨터큰
인베릭 레이어 요거랑 되게 비슷한
역할을 하는 거예요 여기 보시면은
스트라이드 크기 조절해 가지고
얘가 그
얼마나 줄어들게 될지를 정한다 그랬죠
그거 가지고 하는게 똑같은 거예요
시간축만 추가된 거예요
여기 보면 시간적으로 가는
스트라이드로 나눠지고 공간 쪽은
아까랑 똑같이 4로 나눠진게 크기가
이렇게 줄어들게 되겠죠 그거
해주는게요 큐브 원이고요
그 다음에
nvit는 이제 피처맵을 줄일 때
풀링 오퍼레이션을 써요이 이후로는
그
cbt에서는 아까 컴퓨슨다 그랬는데
얘는 풀링을 써주게 돼요 사실 그
컨트롤 쓰는게 더 제너럴 하다고
우리가 얘기를 했었죠 앞부분에서
근데
얘는 그냥 아예 픽스되어 있는 풀링
오퍼레이션을 써가지고 더
계산을 줄이는 방식으로
택했어요
여기서부터는 그냥
mhp랑 mmp가 이렇게 쭉 돌아가게
되는데
얘가 결국 뭐냐면은 그
cbt에서 그
헌드 트랜스포머 블록 그거랑 같은
거예요 거기 안에 mlp가 들어가
있었는데
걔네들을 얘기하는 거예요
그냥
종합적으로 보면은 cbt랑 굉장히
비슷하게 생겼는데 시간축이 추가된거다
큰 골짜고요 미니멀한 차이들이 이렇게
조금씩 있어요 그 정도를 이해해
두시고 논문 한번 보시면 괜찮을 것
같습니다
자 얘는요
성능이 굉장히 좋은데 그 일단
bbc랑 트랜스포머를 약간
차이로 이겼어요 그리고
계산량을 훨씬 더 줄였다는게
특징이에요이 비빅 같은 경우에는
굉장히 무식하게 그 어텐션을 다
했었잖아요
얘는 근데 컨버션을 도입했기 때문에
계산이 훨씬 더 효율적이 됐다라는
거고요
CNN 모델들하고 비교를 해도 성능이
더 좋아지는데
x3d가 우리가 우리 그 cnn에서
마지막에 배웠던 모델이었죠
얘보다는 100배의
코스트를 써서 이겼어요
얘는 좀 가벼운 모델이에요 그리고
슬로우 패스를 이거보다 좀 무거운
모델인데 비슷한 수준의
약간 더 이겼다 뭐 그래서 그림
보시면은
우리가 최고다예요 한마디로 말하면
근데
기존에 좀 가벼웠던 모델들보다는
훨씬 무거워졌지만 훨씬 더 잘해
그리고
기존에 좀 그 무거웠던 모델들보다는
우리가 그래도 조금 더 잘해 비슷하게
쓰는데이 정도의
결론입니다
굉장히 빠르게
여러가지 최신 모델들을 좀 살펴봤는데
일단 제가이 강의는 오늘 처음 하는
거예요 오늘 수업을 위해서 다
만들었어요이 수업이 2021년에
열리고
처음이거든요 작년에 개설을 안
했어가지고 보시면 알겠지만 오늘 배운
논문들은 다 21년 22년 23년
초는 없었나 되게 최근에 나온
모델들이에요 지금도 되게 액티브하게
베이스 라인으로 많이 쓰이고 있고
여러분들이 비디오 관련된 연구를 한다
그러면은 그냥
기본적으로 가져다가 쓸 수도 있고 또
비교 대상이 되기도 하는
여전히 좀 연구가 많이 되고 있는
모델들이니까 좀 잘 알아두시면 많이
도움이 될 것 같고요
추가적으로 모델 몇 개 더 적어
놨는데 일단
서베이가 나왔어요 뭐 퀄리티는 사실
잘 모르겠어요 자세히는 안 읽어
봤는데 22년도 1월에 이쪽 분야에
최신 기술들을 잘 정리해 놓은
서베이논문이 나왔고요
유니폼어라는 것도 있고
셀프바이즈 하게 하는 것도 있고 뭐
디폼오버로텐션이라는 것도 있어요 제가
시간이 되면 이것도 강의하려고
했었는데 뭐 여기는 그냥 참고자료로만
일단 넣고 너무 욕심부리면 여러분들이
힘드니까 일단 오늘 수업은이 정도까지
하고
트랜스포머 지난 시간
하고 이제 이어가지고
트랜스포머가 어떤 식으로 돌아가고
이것들이 어떤 장단점이 있고 그
다음에 이제 비주얼 데이터에 어떻게
적용이 되는지까지 봤어요
이후부터는 우리가
멀티모델리티 뭐 이런 거를 들어갈
건데 그 전에 아마 다음 시간에는
오브젝트 디텍션을 보게 될 거예요
그래서 그 멀티모날리지 들어가기 전에
디텍션이랑 세그멘테이션 태스크를 먼저
한번 좀 보고 거기도 다시
옛날로 돌아가서 전통적인 모델부터
조금 살펴보고
트랜스포머 써서 최근에 어떻게 하고
있는지도 볼 거고요 그런 다음에 이제
멀티모델리티랑 뭐 마지막에 제너레이트
모델 이렇게 나온 거 같아요
아까 말씀드린 대로 다음 주는 수업이
없습니다
다음 주는 정규 수업이 없고 비디오
시청하는 것도 따로 없고요 프로젝트
하시면 됩니다 다음 주에는 그리고
프로젝트 중간 보고서 공지 올라가
있으니까
그때까지 잘 해서 마무리 해주시고
제출하는 거 제가 곧 만들게요
dll에서
혹시 질문 있으신가요
없으시면 오늘 수업 여기까지
하겠습니다 수고하셨습니다
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.