- Видео 46
- Просмотров 270 385
한경훈
Южная Корея
Добавлен 5 окт 2011
본 영상은 코로나 기간동안 수원대학교 데이터과학부 학부생들을 대상으로한 딥러닝 비대면강의입니다.
교재는 밑바닥부터 시작하는 딥러닝1,2입니다.
공개에 흔쾌히 동의해주신 한빛미디어에 감사를 드립니다.
수학, 딥러닝 알고리즘, 파이썬 코드 해석 중심으로 진행합니다.
텐서플로우, 케라스, 파이토치같은 딥러닝 프레임워크를 사용하지 않고 밑바닥부터 구현합니다.
홈페이지에서 PPT, 추가코드, 연습문제, 연습문제 풀이, 기출문제를 다운받으실 수 있습니다.
교재는 밑바닥부터 시작하는 딥러닝1,2입니다.
공개에 흔쾌히 동의해주신 한빛미디어에 감사를 드립니다.
수학, 딥러닝 알고리즘, 파이썬 코드 해석 중심으로 진행합니다.
텐서플로우, 케라스, 파이토치같은 딥러닝 프레임워크를 사용하지 않고 밑바닥부터 구현합니다.
홈페이지에서 PPT, 추가코드, 연습문제, 연습문제 풀이, 기출문제를 다운받으실 수 있습니다.
[딥러닝II] 18강. 합성곱 신경망 구현
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어)
www.hanbit.co.kr/store/books/look.php?p_code=B8475831198
코드 : github.com/WegraLee/deep-learning-from-scratch
강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii
www.hanbit.co.kr/store/books/look.php?p_code=B8475831198
코드 : github.com/WegraLee/deep-learning-from-scratch
강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii
Просмотров: 3 509
Видео
[딥러닝II] 17강. max pooling층 역전파
Просмотров 2,5 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii
[딥러닝II] 16강. 합성곱층 역전파
Просмотров 3,3 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii
[딥러닝II] 15강. im2col
Просмотров 3,8 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii
[딥러닝II] 14강. max pooling
Просмотров 2,8 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii PPT 이미지 출처 p.30 : indoml.com/2018/03/07/student-notes-convolutional-neural-networks-cnn-introduction/ p.33 : Hands-On Machine Learning with Scikit-Learn, Keras, and Te...
[딥러닝II] 13강. 텐서의 합성곱
Просмотров 3 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii PPT 이미지 출처 p.24 : stackoverflow.com/questions/42883547/intuitive-understanding-of-1d-2d-and-3d-convolutions-in-convolutional-neural-n p.25 : indoml.com/2018/03/07/stud...
[딥러닝II] 12강. 행렬의 합성곱
Просмотров 3,6 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii PPT 이미지 출처 p.14 : Hands-On Machine Learning with Scikit-Learn, Keras, and Tensorflow
[딥러닝II] 11강. 텐서
Просмотров 3,7 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii PPT 이미지 출처 p.2 : medium.com/datadriveninvestor/from-scalar-to-tensor-fundamental-mathematics-for-machine-learning-with-intuitive-examples-part-163727dfea8d
[딥러닝II] 10강. 하이퍼파라미터 튜닝
Просмотров 4,3 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii PPT 이미지 출처 p.31 : www.brainstobytes.com/test-training-and-validation-sets/ p.32 : www.andreaperlato.com/aipost/hyperparameters-tuning-in-ai/
[딥러닝II] 9강. 심층신경망 구현
Просмотров 3,1 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii PPT 이미지 출처 p.28,29 : towardsdatascience.com/training-deep-neural-networks-9fdb1964b964
[딥러닝II] 8강. 과적합
Просмотров 3,7 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii PPT 이미지 출처 p.27 : jmlr.org/papers/volume15/srivastava14a.old/srivastava14a.pdf
[딥러닝II] 7강. 배치 정규화
Просмотров 5 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii
[딥러닝II] 6강. Xavier/He 초기값
Просмотров 4,8 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii
[딥러닝 II] 5강. 옵티마이저 벤치마크
Просмотров 2,7 тыс.4 года назад
교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii PPT 이미지 출처 p.16 : towardsdatascience.com/a-visual-explanation-of-gradient-descent-methods-momentum-adagrad-rmsprop-adam-f898b102325c
[딥러닝II] 4강. optimizer: Adam
Просмотров 5 тыс.4 года назад
31:46 : x_n의 n은 0부터 출발하지만 m_n과 v_n의 n은 -1부터 출발하므로 점화식을 m_n=m_{n-1} ...와 v_n=v_{n-1} ...로 써야함. 48:20 좌표평면에 출발점 x_0=(1,1)을 다른 곳(gradient)에 잘못 도시. 계산과정과는 상관없음. 교재 : 밑바닥부터 시작하는 딥러닝 (저자 : 사이토 고키 / 번역 : 이복연 / 출판사 : 한빛미디어) www.hanbit.co.kr/store/books/look.php?p_code=B8475831198 코드 : github.com/WegraLee/deep-learning-from-scratch 강좌 홈페이지 : sites.google.com/site/kyunghoonhan/deep-learning-ii
[딥러닝II] 3강. optimizer: AdaGrad, RMSProp
Просмотров 5 тыс.4 года назад
[딥러닝II] 3강. optimizer: AdaGrad, RMSProp
[딥러닝II] 2강. optimizer: Momentum, NAG
Просмотров 5 тыс.4 года назад
[딥러닝II] 2강. optimizer: Momentum, NAG
[딥러닝III] 13강. seq2seq (기계번역과 챗봇의 원리)
Просмотров 2,7 тыс.4 года назад
[딥러닝III] 13강. seq2seq (기계번역과 챗봇의 원리)
[딥러닝III] 11강. RNN 언어모델의 개선 (LSTM, multi-layer, dropout, weight tying)
Просмотров 1,6 тыс.4 года назад
[딥러닝III] 11강. RNN 언어모델의 개선 (LSTM, multi-layer, dropout, weight tying)
10:37
38:56
여기서 이러시면 안됩니다. 얼른 EBS로 가셔서 전 국민이 볼 수 있어야 합니다. 요즘 세상에 이 정도는 알고 살아야 됩니다. 좋은 강의 감사합니다.
덕담 감사합니다 ^__^
안녕하세요 강의가 너무 유익해 벌써 13강까지 왔습니다. 한가지 의문이 드는 것이 있어 질문드립니다. 동영상 26:08 에서 Relu 는 미분했을 때 0보다 큰 x는 1로 나오는 그래프 인데, 그러면 역전파 에서도 0보다 큰 x를 역전파하면 1이 나와야하는 것 아닌가요? x 가 그대로 나오는 것이 역전파의 결과인지 궁금합니다.
역전파는 수학으로 치면 미분의 연쇄법칙입니다. 속미분 해서 곱하는 거죠. x가 양수일때는 y=x이니까 미분하면 1이고 흘러들어온 미분에 1을 곱하고 x가 음수일때는 y=0이니까 미분하면 0이고 흘러들어온 미분에 0을 곱합니다.
@@SlowAI 미분만 생각하고 연쇄를 놓쳤군요! 이해 되었습니다 감사합니다.
안녕하세요 교수님 행렬과 텐서의 합성곱은 행과 열의 갯수가 같을 경우에만 가능한가요? 감사합니다
입력 이미지의 가로, 세로 해상도는 같을 필요가 없습니다. 필터도 이론적으로는 달라도 되는데 실무에서는 대부분 3×3나 5×5를 사용합니다.
안녕하세요 교수님 lstm은 오히려 시그모이드함수를 활용해서 rnn의 vanishing problem이 더 심해질 것 같은데 더 잘 작동하는 이유가 무었인가요? rnn에서 시간정보에대한 underfitting을 해결해서 좀 더 잘 작동하는것 같고 배니쉬 문제는 여전할것 같은데 rnn의 한계를 해결한게 이해가 잘안갑니다..
forget 게이트가 vanishing gradient를 어떻게 해결하는지 연쇄법칙으로 설명하는 블로그입니다. curt-park.github.io/2017-04-03/why-is-lstm-strong-on-gradient-vanishing/
@@SlowAI 감사합니다 교수님 덕분에 쉽게 이해할수가있습니다!
안녕하세요 교수님, mask에 대한 개념이 없어서 그부분이 잘 이해가 안되는데 혹시 mask개념이 어디서 나오는지 알 수 있을까요?? 항상 양질의 강의 감사드립니다!
통상적으로 <PAD> 토큰을 학습에서 배제하기 위해서 사용합니다.
좋은 강의를 무료로 올려주셔서 감사합니다
교수님 덕분에 이해할 수 있었습니다. 정말 감사합니다^^
교수님 sequential data의 아웃풋이 마지막레이어에 하나의 값으로 나오는 경우 truncated bptt를 어떻게적용하나요? 그리고 배치처리때 NxTxd 에서 T가 seq개수고, d는 워드벡터의 dimension인건가요??
1. truncated BPTT는 RNN층의 시간에 대한 역전파 방식입니다. RNN층에서 출력되는 데이터는 윗층으로 가고 동시에 RNN층으로 다시 들어옵니다. RNN층을 순환하는 흐름에 대해서만 truncated BPTT가 적용되고 윗층으로 올라가는 흐름은 truncated BPTT와 상관 없습니다. 2. 교재에서 생각하는 언어모델은 RNN층 바로 밑에 Embedding층이 있기 때문에 D는 워드벡터의 dimension이 됩니다. RNN층을 2겹 이상 쌓을수도 있고 자연어뿐 아니라 다른 시계열 데이터도 입력될수 있기 때문에 일반적으로 D를 입력 데이터의 피처 개수라고 생각할 수 있습니다.
안녕하세요 교수님 1x7 원핫벡터에 활성함수마저 없으면 히든레이어가 굳이 7x3이나 7x1이나 선형결합이므로 같은 효과가아닌가요 ? 굳이 3개의 레이어를 쓰는 이유가 무었인가요?
은닉층의 뉴런수가 벡터 표현의 차원입니다. 7x3으로 잡으면 단어들이 3차원 벡터로 표현됩니다. 7x1으로 잡으면 단어들을 스칼라로 표현하는 셈이 되겠지요.
@@SlowAI 안녕하세요 교수님 자세한댓글 감사드립니다. 그렇다면 궁금한점이 (x1+x2)*A*B 와 (x1+x2)*C 는 동일하게 표현이가능한데 굳이 액티베이션없는 히든레이어를 두는 이유가 궁금합니다.
@@후유-o1iCBOW 모델에서 첫번째 단어의 벡터표현은 [1,0,0,...0]을 입력했을 때 은닉층에 나타나는 벡터입니다. 두번째 단어의 벡터표현은 [0,1,0,0,...,0]을 입력했을 때 은닉층에 나타나는 벡터이구요. (x1+x2)*C로 잡으면 은닉층이 없어서 벡터표현을 얻지 못하겠지요. 벡터표현을 얻기 위해서는 은닉층이 꼭 있어야만 합니다. 질문을 바꿔보겠습니다. 은닉층에 통상적으로 하듯이 relu나 sigmoid를 추가하면 얻어지는 벡터 표현이 좋아지는가? 나빠지는가? 실험을 해보면 벡터표현이 나빠집니다. drive.google.com/file/d/10o7Ak6h5mMmXbnVwWHddQ_fdrwnhN-QN/view?usp=sharing 그 이유를 수학적으로 짐작해보면요. relu는 음수를 모두 0으로 죽이는 변환입니다. 2차원 평면을 생각해보면 relu는 1사분면위의 벡터로 변환합니다. 이루는 각도가 90도를 넘지 못하지요. relu를 취하게 되면 벡터표현이 양수라는 심각한 제한을 받게 되고 단어의 의미를 충실히 반영하기에 운신의 폭이 좁아질수 밖에 없습니다. sigmoid 변환을 하게 되면 벡터표현이 0과 1사이라는 더 강한 제한을 받게 됩니다.
@@SlowAI 단어의 벡터표현을 도출하기 위한 것이였군요!! 감사합니다!
안녕하세요 교수님 강의 듣던중 궁금한점생겨 질문드립니다. svd로 차원축소할때 적용된 행렬의 두개의 열만 선택하는게 이해가 잘 안됩니다.. svd 로 대각화하면 sigma1*u1*v1.T + sigma2*u2*v2.T ... 이렇게 스펙트럼분해하고 시그마가 큰 경우 정보를 많이 담고 있으므로 시그마가 큰 상위 몇개의 값만 선택하는데 u의 가장 큰 열이 원래 행렬의 단어 인덱스 정보를 그대로 반영할 수가 있나요? PPMI행렬에서 0번째 열의 단어가 i 라고한다면 분해된 행렬 USV.T 에서 U의 0번째 열 m by 1 이 단어 i의 정보를 반영한다는게 잘 이해가 안갑니다. 그냥 임의로 시그마가 큰값(정보를 많이담고있는 하나의 축)을 나타내는게 아닌지.. 어떻게 단어의 인덱스가 일치하는지 잘 이해가안갑니다.. 감사합니다!
교재에서는 U만 잘라서 생각하는 데 이건 통상적인 SVD와는 다릅니다. 구글링을 해보면 교재처럼 U만 잘라서 생각하는 논문도 있고 S까지 잘라서 곱하는 논문도 있습니다. 스탠포드 강의록인데 p.59를 보시면 But instead of multiplying, we’ll just make use of W란 표현이 나옵니다. 통상적인 SVD와 다르다는 점을 강조한 표현입니다. web.stanford.edu/~jurafsky/li15/lec3.vector.pdf 다음 논문 6페이지를 보시면 통상적인 SVD처럼 U와 S를 자른후 곱해서 벡터 표현을 얻습니다. 밑에 주석을 보시면 S에 α승을 한 후에 곱하는 방법을 소개한 논문을 언급합니다. 특히 α=0이면 교재처럼 U만 생각하는 경우겠죠. 저자는 In particular, setting α = 0 performs well for many tasks.라고 주석을 답니다 proceedings.neurips.cc/paper_files/paper/2014/file/feab05aa91085b7a8012516bc3533958-Paper.pdf 밑에 답글 중에 heejuneAhn님의 질문(질문. SVD= U S V' ....)에 대한 답글이 있습니다. U만 생각하는 벡터표현과 U와 S를 모두 고려하는 벡터표현에 대해 몇가지 실험을 하는 노트북이 링크되어 있습니다. 벡터표현의 차원이 적절할때는 둘다 성능은 비슷하게 나옵니다. 하지만 벡터표현의 차원이 커지면 U는 직교행렬이라 모든 벡터표현의 코사인 유사도가 0에 가깝게 되어 U만 생각하는 벡터표현은 성능이 심하게 떨어집니다.
좋은 강의 감사합니다. 덕분에 더 쉽게 이해할 수 있었습니다.
안녕하세요 교수님 sequential한 데이터를 다루기위해 추가적으로 rnn을 공부하려는데 자연어처리에는 크게관심이없지만 rnn을 공부하려면 기본적인 자연어처리지식부터 공부하는게 나을까요?
word2vec은 건너 뛰고 바로 RNN 들어가시면 됩니다. word2vec은 단어 전처리에 관한 기법이어서 다른 시계열 데이터에는 적용되지 않습니다.
맥스 풀링을 구현한 클래스로부터 맥스 풀링 필터의 사이즈를 꽤나 세부적으로 나누는 과정에 눈에 들어옵니다. 무슨 말이냐 하면, 예시로 든 맥스 풀링의 너비와 높이는 정방이지만, 정작 맥스 풀링을 구현한 클래스에서는 너비와 높이를 따로 입력 받는다는 점이 눈에 들어온 것입니다. 맥스 풀링 필터가 정방 형태를 띈다면 클래스를 정의하는 과정에서 너비와 높이를 따로 받을 필요가 없어 보입니다. 반대로 이야기하자면 맥스 풀링 필터는 정방 형태보다는 직방 형태라고 생각하는 것이 보다 정확하다는 생각이 듭니다. 맥스 풀링 필터는 정방 형태가 아닌 경우도 존재할 수 있다고 생각하는 것이 좋을까요?
연구 레벨에서는 가로와 세로를 다르게 잡아서 효과를 확인해볼 수 있겠지만 실무레벨에서 다르게 잡는 경우를 저는 보지 못했습니다. 맥스 풀링이 해상도를 줄이는게 주목적인데 가로, 세로가 다른 비율로 줄어들 것 같습니다. 예를 들어, 필터의 크기와 스트라이드를 가로=3, 세로=2로 잡으면 가로는 1/3, 세로는 1/2로 해상도가 다르게 줄어듭니다.
@@SlowAI 답변 감사합니다. 고등학교까지의 교육과정에서 배우는 다른 과목에 비해 딥러닝 분야는 현재진행형으로 내용이 정립되어 가는 도중이라 느껴지네요. 몇 년이 지난 뒤에 기존의 알고 있던 내용이 바뀔 수 있다 생각하면 조금 어질어질하네요..
교수님 안녕하세요!! 독학하다가 MNIST에서 어려움을 느끼고 검색 중에 교수님 영상을 발견하고, MNIST 초반부만 들었음에도 설명이 쏙쏙 잘 들어와 1장부터 다시 공부하고 있습니다 ㅎㅎ 이번 강의를 듣던 중 질문이 생겨 댓글 남깁니다. 영상이 오래 되어 답변을 해주실지 모르겠네요,, 39:09초에서 교차 엔트로피값을 구하라는 문제가 나오는데, 앞전에 설명한 개념은 교차 엔트로피 오차값이기에 혼동이 옵니다. 찾아보니 교차 엔트로피와 교차 엔트로피 오차는 비슷하지만 다른 개념이라고 설명이 되어 있네요. 교차 엔트로피 오차를 구하라는 것이 문제의 정확한 취지이겠지요? 좋은 강의 자료 정말 감사합니다!! 좋은 하루 되세요 :)
다른 개념이라고 설명되어 있는 링크를 알수 있을까요?
세부적 사항을 강의해 주셔서 정말 볼만합니다. 감사합니다. 유튜브에 뭐 여러가지 개념 강의들 너무 많은데 진짜 핵심은 빠져 있어서 영상 들어봐야 시간만 낭비란 생각이 많이 들었는데 오늘 진짜를 찾았습니다.
교수님 덕분에 많은 개념이 쉽게 정리되었습니다! 아무것도 모르고 뛰어든 AI 개발인데, 이 강의가 아니였다면 제가 뭘하는지도 모르면서 개발할뻔했네요 강의를 올리신 후 4년이 지났는데, 근본은 바뀌지 않은것 같습니다만 혹시 현 시점에서 달라진 부분이 있을지 궁금합니다
강의의 핵심 목적을 말씀해주셨네요 ㅎㅎ 생산적인 프로젝트를 하더라도 내가 무얼 하는지 이해하면서 하자. 밑바닥부터 시작하는 딥러닝 1권은 2017년에 나왔는데 현재 시점에서도 업데이트할것이 별로 없습니다. 그당시 대부분의 딥러닝 책들처럼 텐서플로우로 써져 있었다면 아니었겠지요. 2권은 자연어 처리가 주제이고 2019년에 나왔는데요. RNN, LSTM, 어텐션을 모두 다루는데 현재 트렌드를 보면 RNN, LSTM의 양을 줄이고 어텐션을 늘려야지 싶습니다. 1권에서 마이너하게 업데이트할 코드는 (1) 파이썬이 업데이트 되면서 오더드 딕셔너리를 굳이 쓸 필요가 없어졌습니다. (2) numpy가 업데이트 되면서 np.int를 못씁니다. np.int32를 사용하면 됩니다. (3) matplotlib이 업데이트 되면서 3차원에 곡면 그리는 코드가 변경되었습니다. (교과서에서는 다루지 않는 내용)
안녕하세요 교수님 강의 잘듣고있습니다. 혹시 이미지를 im2col하고 내적연산으로 효율적 처리하는건 이해가가는데 다음 레이어에 forward연산할때 왜 굳이 다시 img로 reshape를 하는건가요? 다음 레이어에서도 어차피 똑같이 받은 이미지를 im2col하는데 reshape해서 전파하는게 이해가 잘안갑니다..
PPT 35 페이지로 설명하겠습니다. 과정1→과정2→과정3까지 진행한 후 과정4,과정5는 패스 그리고 다음층에서 과정1을 패스한후 바로 과정2로 넘어가는게 효율적이지 않을까라는 뜻으로 이해했습니다. 문제는 행렬이 →과정4→과정5→과정1→을 거치면 원래 행렬로 돌아오지 않습니다. 다시말해, 있으나 마나한 과정이 아니라는 겁니다. 가장 많이 사용하는 3×3 필터에 스트라이드 1로 생각해보면 필터가 이동하면서 겹치기 때문에 과정1을 거치면 픽셀 개수가 더 늘어납니다. 과정4, 과정5는 단순 픽셀 이동이기 때문에 픽셀 개수가 유지 되구요. 결과적으로 →과정4→과정5→과정1→을 거치면 행렬 사이즈가 더 커지게 됩니다. 3×3 필터에 스트라이드 3이면 픽셀 개수가 유지되니까 원래 행렬로 돌아오지 않을까 생각이 들수도 있는데요. 이것도 그렇지 않습니다. 이경우는 겹치지 않기 때문에 과정1이 4차원 텐서 N×C×H×W을 행렬 N×(C*H*W)로 단순 reshape하는 과정입니다. 그런데 과정4→과정5는 행렬 N×(C*H*W)을 4차원 텐서 N×C×H×W로 reshape하는 과정이 아닙니다.
감사합니다!! 다시보니 이해가 되었습니다 텐서가 낯설다보니 transpose 랑 reshape의 개념을 이해를 못했었네요
역전파는 왜 편미분으로 나타나도록 설계되어 있는지 궁금해요. 학자들이 고심한 결과일까요? 나중에 더 공부하다 보면 알게 될까요 아님 지금도 알 수 있는데 이해를 못한 것일까요
데이터에 대해 정확한 예측을 하는 신경망의 파라미터(가중치,편향)를 찾는다는 것은 손실함수의 최소점을 찾는 문제입니다. 경사하강법을 적용해서 최소문제를 풀려면 그레디언트를 구해야 합니다. (산을 눈감고 내려가기 위해 발등이 가장 올라가는 방향을 구하는 겁니다.) 손실함수는 다양한 함수들의 합성으로 표현되므로 연쇄법칙을 통해 미분해야 할겁니다. 다변수 미적분학시간에 하듯이 연쇄법칙과 공식을 통해 미분을 할수도 있는데요. 실제로 그렇게도 많이 합니다. 그런데 이런 방식으로 계산하는 논문이나 글을 보시면 변수의 개수가 워낙 많아서 무지 복잡한 인덱스때문에 피곤하실겁니다. 딥러닝 이외의 여러분야에서 다변수 미분을 계산그래프로 구하는 기법을 이미 있는지 모르고 각자 독자적으로 개발해서 사용해 왔다고 하네요. (저는 수학이 전공임에도 딥러닝 공부하기 전까지 이런 미분 계산 방식을 본적이 없었습니다.) 계산그래프를 사용하면 복잡한 인덱스를 피하고 직관적으로 파악할수 있습니다.
19:54 에서 함수 L의 본질은 뭔가요?? 또 갑자기 왜 L을 편미분하는 것인가요? 또, 20:38 에서 " 오른쪽으로 흘러들어오는 미분이죠" 가 정확히 뭔 말인지 모르겠어요
1. 사과, 귤 예에서는 지불해야하는 가격입니다. 신경망에서는 손실함수입니다. 손실함수를 영어로 Loss function이라고 해서 L로 표기했습니다. 2. 사과, 귤 계산그래프에서 기계적으로 역전파 규칙을 설명했는데요. 그 수학적 의미가 편미분입니다. 3. 사과, 귤 계산그래프에서 오른쪽에서 흘러들어오는 미분이 있었는데요. 그 의미가 연쇄법칙입니다.
vs code를 사용해서 실행하는 거랑 스파이더를 이용해서 실행하는 거랑 큰 차이는 없는 거죠??
네, 차이 없습니다.
한학기 수업 잘 들었습니다. 좋은 강의 감사합니다.
하나하나 기초를 다져가기에 정말 좋은 강의인 것 같습니다. 3년이 지나 이제 보는데 정말 좋네요~
교수님, 사랑합니다^^
16:44 에서 보폭을 저렇게 정의한 이유가 있나요?
현재 위치가 x_n이고 다음 위치가 x_{n+1}이어서 보폭은 두 위치의 거리 || x_{n+1} - x_n || 입니다. || x_{n+1} - x_n || = || - η grad f (x_n) || = η || grad f (x_n) || 입니다.
교재 p.129에서 '기울기가 가리키는 쪽은 각 장소에서 함수의 출력 값을 가장 크게 줄이는 방향입니다.' 의 이유를 구체적으로 알 수 있을까요??
PPT 15페이지 (ii)와 관련된 내용입니다. 그레디언트의 반대 방향이 함수값을 가장 빠르게 감소시키는 방향입니다. 함수 f(x,y)=x^2+y^2의 그레디언트는 (2x,2y)이고 반대방향은 - (2x,2y)입니다. 벡터장을 화살표로 도시하면 교재 p.129 그림처럼 됩니다.
교수님 좋은 영상 항상 감사드립니다. 최근 코드를 스파이더를 실행시켜 보던중 with open("sample~...as f : 이 코드 부분에서 계속 에러가 납니다. 에러내용은 FileNotFoundError: [Errno 2] No such file or directory: 'sample_weight.pkl' 이런식으로 뜹니다. 왜 이런지 궁금합니다. 또한 피클 파일을 스파이더에서는 열 수 없고, 직접 열어보려고 하면 추가 프로그램이나 앱 설치 이런식으로 연결됩니다... 왜 이런건지 알려주신다면 감사하겠습니다!!
피클 파일은 텍스트 파일이 아니라 이진 파일이어서 스파이더로 열더라도 모두 깨져서 나옵니다. ch03 디렉토리에 sample_weight.pkl 파일이 있는지 확인하시구요. 파일이 있다면 스파이더의 경로 문제일 가능성이 큽니다. 코드에서 에러나기 전 줄에 print(os.getcwd())을 입력한후에 실행해보세요. ch03이 출력이 안되었다면 현재 작업디렉토리가 ch03 디렉토리로 지정이 안되어서 피클 파일을 못찾는겁니다.
7:21 쯤에 파란색 직선을 그을때 원래 h이였던 것을 왜 2h로 해석하는지 궁금합니다! 원래대로 h 로 본다면 중심 차분과 전방 차분의 값이 동일할것 같은데요
교재에서 사용한 그래프가 하필 x에서 대칭 비슷해서 사실 적절한 예제는 아닙니다. 다음 링크에서 Figure 4-2를 보시면 다르다는게 명확합니다. koki0702.github.io/dezero-book/en/step04.html 영상에서 파란색을 2h로 잡은건 교재에서 예로 들은 그래프 위에서 선명한 시각적 대비를 위해서입니다. 변량이 둘다 2h니까 나름 공평한 비교이기도 하구요. 그리고 사실 수학적으로는 그래프보다 미분계수와의 오차가 h로 어떻게 표현되느냐 입니다. 전방차분은 O(h)이고 중앙차분은 O(h^2)이어서 중앙차분이 h가 0으로 가까이 갈때 오차가 훨씬 빠르게 감소합니다.
평균제곱오차와 교차 엔트로피 오차가 왜 두 확률분포 사이의 거리를 나타내는지 잘 모르겠어요. 10차원상의 점과 점사이의 거리 공식이 평균제곱오차와 비슷한것은 알겠는데 시각적으로는 3차원상의 점과 점사이의 거리공식까지밖에 이해가 안가네요
4차원이상은 어차피 시각적으로 이해 불가능합니다. 유추와 논리만이 있을 뿐이죠.
오차제곱합이랑 평균제곱오차는 서로 같은 말인가요?
다릅니다. 평균제곱오차 수식에서 앞에 1/N이 없어서 하신 질문인듯한데요. N은 클래스 개수가 아니라 데이터의 개수입니다. 교재의 평균제곱오차 수식 앞에 통상적으로 붙는 1/N이 없어도 데이터가 여러개일때는 손실함수값을 데이터의 개수로 나눠주기 때문에 다른 교재의 평균제곱오차 수식과 일치합니다. 그런데 다중분류에 대해 평균제곱오차를 소개하는 경우는 드뭅니다. 왜냐하면 통상적으로 평균제곱오차는 분류문제에는 사용하지 않고 회귀문제에 사용됩니다. 학습시 성능이 떨어져서 인데 그 수학적인 이유도 알려져 있습니다. 교재도 평균제곱오차를 소개만 하고 그이후에는 교차 엔트로피만을 사용합니다. 교재에서 다중분류문제인데 평균제곱오차를 소개한 이유는 교차 엔트로피보다 더 직관적이어서이지 않았나 싶습니다.
교수님 강의를 보다가 궁금한 사항이 생겨서 질문 드립니다. 제가 이해한 바로는 예를 들어서 [9]라는 학습 데이터가 들어오면 이걸 784개의 벡터로 바꾼 다음에 여기에 경사하강법을 이용하는거 같습니다. 즉 숫자 하나에 손실함수 1개가 나와 거기서 dL/dw 를 각각 구하는것으로 이해했습니다. 근데 만약에 배치처리를 하게 된다면(100개씩) 100개의 묶음 안에서 각각 새로운 손실함수가 생기게 되는것이 아닌가요? (예를 들어서 숫자가 9,5,4....이렇게 있다고 하면 수 각각에 대해 손실함수가 생기게 되는것이 아닌가요?) 그렇게 된다면 1걸음 내려갈때 100개의 수 중 첫번째 수의 gradient로 내려가나요 아니면 100개의 수의 평균 gradient로 내려가게 되는지 궁금해서 질문드립니다.
데이터셋의 손실함수 값은 각 데이터의 손실함수 값의 평균으로 정의합니다. 말씀하신대로 100개의 수의 평균 gradient로 내려가게 됩니다. ruclips.net/video/Bj4TS9ip9SM/видео.html
좋은 강의 너무 감사합니다! ^^ 덕분에 잘 이해했어요~
교수님 수업 감사합니다! 궁금한 게 있어서 댓글 남깁니다. 배치 정규화 층에서 역전파를 통해 얻을 수 있는 베타, 감마 값이 효율적인 분포를 만든다는 부분이 잘 이해가 가지 않습니다. 역전파를 통해 얻을 수 있는 가중치 매개변수에 대한 미분값들은 경사하강법을 통해 손실함수 값을 줄일 수 있지만 갱신된 베타, 감마 값은 어떻게 데이터 분포를 효율적으로 만들 수 있는지 궁금합니다!!
배치 정규화층은 입력데이터 x에 대해 각 피처를 먼저 정규화해서 x_n을 만드는데요. x_n의 각 피처의 평균은 0, 표준편차는 1입니다. 여기에 γ를 곱하고 β를 더하면 각 피처의 평균은 β, 표준편차는 γ가 됩니다. (γ>0) 여기서 γ와 β는 사람이 정하는게 아니고 신경망이 데이터를 통해 스스로 학습해야할 파라미터입니다. 다시말해 데이터를 입력하면 순전파 → 역전파 → 옵티마이저 과정을 거쳐 그레디언트 ∂L/∂γ, ∂L/∂β를 구해서 손실함수값을 낮추도록 γ와 β를 업데이트해갑니다. γ와 β가 표준편차와 평균이기 때문에 손실함수 값을 낮추는 방향으로 표준편차와 평균을 찾아간다고 해석할 수 있습니다.
LSTM 모델에 추가된 output gate, input gate, forget gate가 실제 어떻게 동작하는지, 책에서 주어진 예제인 "Tom was watching TV in his room. Mary came into the room. Mary said hi to < >"를 가지고 해보면 이해가 훨씬 쉬울 것 같습니다. LSTM과 일반 RNN에서의 차이를 이예제를 가지고 설명할수 있으면 좋을 것 같네요. 제가 생각해 보면 the 같은 단어들은 input gate에서 제대로 추가를 안시켜 주게 되지 않을까 싶은데, forget gate가 잊어먹게 하는 역할은 언제 할지를 이해하기가 어려운 부분이 있는데. 문장이 끝나던가 할때 끝을 수도 없고 어떻게 생각하시나요?
말씀하신 예를 구현해서 각 게이트들이 어떤 역할을 하는지 확인할 수 있으면 아주 멋진 실험이 될듯합니다. LSTM의 각 게이트들이 어떤 역할을 하는지 이론이 아니라 실험적으로 확인하는 예를 검색해봤는데 못찾겠네요. 이건 xai (설명가능한 ai)의 영역이라는 느낌이 듭니다. CNN도 필터가 낮은 층에서는 로컬하고 단순한 특징을 찾고 높은 층에서는 글로벌하고 복잡한 특징을 찾는다고 말은 하지만 실제 필터를 시각화해서 실제 그런지 확인하는건 다른 기법이 필요하듯이 말입니다. 그런데 검색하다보니 세 게이트중에 forget 게이트가 절대적으로 중요한 역할을 한다는 논문이 보이네요. 첫번째 논문에서는 5400번의 실험을 통해서 확인을 했고 두번째 논문에서는 forget 게이트만으로 작동하는 LSTM을 생각하네요. arxiv.org/pdf/1503.04069.pdf arxiv.org/pdf/1804.04849.pdf
코드 보면서 몇 가지 궁금한 점이 있는데요. 1. TimeRNN에 보면 forward 시에 매번 RNN을 새로 만드는데. 이렇게 할 필요가 있는 것인가요? 코드를 간단히 구현하기 위하여 그냥 이렇게 처리한 것인지. 2. 이때 RNN params들은 모든 RNN 노드들이 공유하는 것이죠? backward 시에도 Time 범위 안에 있는 모든 gradient 값들은 누적을 하여 합산을 하는 것이고. 3. RNNLM에서 보면 statefull = False로 되어 있는 것 같은데, 결국은 한 batch안의 iteration시에 이전 iteration결과를 다음 iteration에 사용하지 않는 것이죠? 그러면 결국 최소한 학습시에는 timesize이상의 backpropagtion을 이루어지지 않을 뿐 더로 상태 정보도 고려가 안되는 것인가요? 4. Pytorch 등의 Framework에서도 이처럼 TimeRNN 스타일로 코딩이 되어 있는지요?
1. 역전파를 할때는 순전파때 계산한 값이 필요합니다. 하이퍼볼릭 탄젠트 값 y=tanh x을 기억해두고 있어야 역전파할때 1-y^2으로 빠르게 미분을 계산할 수 있습니다. RNN 클래스 보시면 순전파때 h_next = np.tanh(t) self.cache = (x, h_prev, h_next) 로 하이퍼볼릭 텐젠트 값을 기억해뒀다가 역전파때 x, h_prev, h_next = self.cache dt = dh_next * (1 - h_next ** 2) 와 같이 불러와서 미분을 빠르게 계산합니다. 문제는 각 시간대별로 입력데이터가 모두 다르기때문에 RNN층의 하이퍼볼릭 탄젠트값이 모두 다릅니다. 시간대별로 다른 RNN 인스턴스를 만들어서 다른 인스턴스 변수 self.cache에 기록해둬야 합니다.
2. 넵 순전파를 보시면 for t in range(T): layer = RNN(*self.params) 와 같이 동일한 self.params을 사용하여 RNN 인스턴스를 만듭니다. 역전파를 보시면 for i, grad in enumerate(layer.grads): grads[i] += grad 와 같이 타임 블럭안의 모든 그레디언트를 더합니다. 나중에 옵티마이저가 이걸 받아서 파라미터를 업데이트합니다.
3. simple_rnnlm.py를 보시면 TimeRNN(rnn_Wx, rnn_Wh, rnn_b, stateful=True) 와 같이 stateful이 True로 켜져있습니다. 학습할때 다음 타임블럭으로 hidden state를 전달합니다.
4. 텐서플로우 RNN 링크입니다. www.tensorflow.org/api_docs/python/tf/keras/layers/SimpleRNN units는 hidden state의 차원을 뜻합니다. 타임블럭의 길이는 입력 데이터에 의해 자동으로 결정됩니다. stateful은 교재 코드와 이름도 동일하고 기능도 동일합니다. return_sequences는 True로 켜놓으면 타임블럭안에서 순전파할때 나오는 모든 hidden state를 리턴하고 False로 꺼놓으면 마지막 hidden state만 리턴합니다. 간단한 예에서 실험을 해서 교재 코드 출력값과 프레임워크 출력값이 일치하면 동일한 작동방식이라고 예상할수 있습니다. 7강 연습문제 2번에서 간단한 예에서 RNN의 순전파를 직접 손으로 계산합니다. 8강 연습문제 2번에서는 교재의 TimeRNN 코드를 이용해서 검산을 하구요. 텐서플로우를 이용해도 동일한 값이 출력됩니다. 세 방법을 비교하는 주피터 노트북 링크입니다. drive.google.com/file/d/1N_HLYtDZwgWN8p5w0cbauNNcsniyLivm/view?usp=sharing
질문. SVD = U S V' 에서 U 의 행벡터들이 word 들의 embedding이라고 했는데, U의 행백터들은 상호 othorgonal 하지 않나요? 그렇다면 embedding 된 벡터들 간에 내적이 모두 0이 될 것이고, 차원 축소를 하더라도 0에 가까운 결과를 얻을 것 같은데요. 원래 우리가 원하는 것은 cosine-similarity 아니었던가요? 원하는 결과는 embedding 빅터들을 곱하면 ppmi 값이 나와야 할 것 같은데. 제 논리 중 어디가 잘못됬을까요?
예를 들어, (1/sqrt(2), 0, 1/sqrt(2))와 (1/sqrt(2), 0, -1/sqrt(2))는 서로 직교하는 단위벡터이지만 xy 평면으로 사영을 하면 (1/sqrt(2), 0)로 같아 집니다. 물론 이건 수학적으로 만들어낸 극단적인 예제이구요. 현재의 10,000차원 벡터표현에서는 차원을 많이 줄일수록 직교성이 많이 사라지고 적게 줄일수록 직교에 가까울 가능성이 커질걸로 예상할 수 있습니다. 그러면 오히려 벡터표현의 차원이 클수록 U에서 얻은 벡터표현은 코사인 유사도 성능이 더 떨어질거라 예상할 수 있습니다. U, S, V 모두 잘라내서 곱한 것은 상황이 다릅니다. 기존의 PPMI 행렬을 더 가깝게 근사할테니까요. 그리고 여기서 주목할 점은 직교변환은 코사인 유사도를 보존하기 때문에 V는 굳이 곱할 필요가 없습니다. 실험을 담은 주피터 노트북 링크입니다. drive.google.com/file/d/1aWbYUuiszBlkAD_fa5BBEz--lTTAwwnB/view?usp=sharing 덕분에 재밌는 실험을 하게 되었습니다.
부연 설명을 하자면, The Mutual Information between 2 random variables is the amount of information that one gains about a random variable by observing the value of the other. I(X) - I(X|Y) = I(Y) - I(Y|X) 즉 두 변수 중 하나를 알았을 때 남아있는 정보 (또는 북활실성)인 I(X|Y) 또는 I(Y|X) 를 원래 변수가 가지고 있는 정보인 I(X) 또는 I(Y) 에서 뺀 것입니다. 이를 수식 적으로 정리하면 I(X) = E( - log2 p(x) ), I(Y) = E( - log2 p(y) ), 그리고 I(Y|X) = E(- log2 ( p(x,y)/p(x)), I(X|Y) = E(- log2 ( p(x,y)/p(y)) 이 되고 M(X, Y) = E ( - log2 p(x) *p(y) /p(x, y) ) = E( log2 p(x,y)/p(x)p(y) ) 가 되는 것입니다. point-wise mutual information 은 여기서 특정 x, y에 대한 것이라고 볼 수 있는데, 즉 두 변수의 상관도를 의미 합니다. covariance 같을 것을 사용하는 경우도 있지만 murual information이 좀 더 좋다고 알려져 있습니다.
엔트로피, mutual information, KL-divergence는 딥러닝I 7강에서 다룹니다. 정리하신 내용은 학생들 리마인드용으로 좋아보입니다. ruclips.net/video/aoK5N1i9B1Q/видео.html
안녕하세요 교수님 다름이아니라. 다 채널 2d 컨볼루션 연산에서 궁금한 점이 있는데 , 만약 input image가 4*4에 3channel이고 kernel이 3*3에 2개라는 조건이 있으면 이는 channel wise 매칭이 안되므로 당연히 kernel은 3channel이라는 것을 생략한 것으로 보는 게 맞나요? 그렇다고 한다면, 필터의 갯수는 그저 output channel을 고지하고자 쓴 수단이겠죠? 항상 좋은 영상과 답신 감사드립니다.
네, 합성곱이 정의되려면 입력 데이터의 채널수와 필터의 채널수가 같아야만 합니다. 따라서 입력데이터의 채널수를 C라고 표기할때 필터의 채널수는 굳이 FC라고 안쓰고 C라고 씁니다. 입력 데이터의 채널수가 3이면 필터의 채널수는 자동으로 3으로 결정이 되고 따라서 생략해도 무방합니다. 말씀하신대로 필터의 개수는 출력 데이터의 채널수와 같은데요. 필터 개수가 가지는 의미는 찾고 싶은 특성의 개수정도로 해석하면 좋습니다. 심층 CNN을 만들때 통상적으로 층이 올라갈수록 필터의 개수가 많아집니다. 낮은 층에서는 좁은 영역의 단순한 특징을 찾는데 반해 높은 층에서는 넓은 영역의 복잡한 특징을 찾습니다. 사람 얼굴로 치면 얼굴 윤곽 전체가 비슷한 사람은 드물지만 범위를 코로 좁히면 비슷한 코모양을 가진 사람은 많아지고 범위를 콧구멍으로 좁히면 훨씬 더 많아집니다. 그래서 층이 올라갈수록 더 많은 필터를 사용해야 합니다. 실제로 필터를 시각화해보면 낮은 층에서는 모든 필터가 반응하지만 높은 층으로 갈수록 소수의 필터만 반응을 합니다.
@@SlowAI 항상 양질의 강의 감사드립니다
실제로 동일한 컨텍스트에서 답이 하나가 아닐 꺼 같은데요. 어떤 경우는 a b 단어 사이에 c 가 오지만 어떤 경우는 d 나 e가 올 수도 있는데, 그런 것은 고려가 안되어있는 것 아닌가요? 그걸 적용 하려면 p[target_id] = 0을 모든 정답들에 대하여 수행을 해줘야 할 것 같은데. 어차피 그런게 고려가 안되는데 word_p 를 굳이 copy 하면서 계산양을 늘리고 복원 추출 비복원 추출을 고민할 필요가 실제 계산에 얼마나 영향을 줄 수 있을까 싶네요. 물론 교육적으로는 가능한 정확하게 하는 것이 필요할 것 같긴한데.
실제 적용할때는 윈도우의 크기가 1보다는 커서 말씀하신 부분은 아주 드물게 일어날듯 보입니다. 교재에서 PTB 데이터셋에 적용할때는 윈도우 크기를 5로 잡습니다. 오히려 문제가 되는 부분은 샘플링할때 정답이 뽑힐 확률이 어차피 극히 적은데 매번 계산 비용을 감수할만큼 가치가 있는가 인듯합니다. 여기에 대해서 스택 오버 플로우에 질문과 답글이 있는데요. 감수할만한 가치가 없다가 대세인듯합니다. 이론은 negative sampling이지만 실제 구현은 random sampling으로 하는게 대세인듯합니다. stackoverflow.com/questions/60075238/excluding-positive-samples-in-negative-sampling stackoverflow.com/questions/71455744/how-do-you-handle-positive-and-negative-samples-when-they-are-the-same-in-word2v
보통은 subword tokenizer를 쓰기 때문에 토큰수는 60000개 이상은 안됩니다.
좋은 정보 감사합니다. 댓글 보는 학생들을 위해서 링크를 달아둡니다. wikidocs.net/86649
다른 프레임워크는 데트워크와 loss를 구분하는데 여기서는 네트워크 안에 loss까지 포함하고 있네요. 그러면 loss 를 바꾸기 불편할 듯
교재가 선택과 집중을 하는데요. 저수준 구현을 통한 원리 이해에 포커싱을 하고 다른 부분은 과감히 포기합니다. 데이터의 다양성도 포기하고 (1권은 MNIST, 2권은 PTB) 손실함수의 다양성(교차 엔트로피만 사용)도 포기합니다. 신경망안에 교차 엔트로피를 포함시킴으로써 얻는 장점도 있는데요. 소프트맥스와 교차엔트로피를 묶어서 역전파를 계산하면 그레디언트가 매우 간단하게 나와서 구현에 용이합니다. 대신 predict 메서드를 정의해서 소프트맥스 전까지만 순전파값을 출력할수 있게합니다.
앞에 단어와 뒤의 단어는 동일하지 않으니 메트릭스가 사실은 달라야 하는데. 그렇게 하면 벡터 임베딩에 사용할수 있는게 두개라서 word2vec는 좀 안좋은 점이 있네요.
입력 단어가 원핫벡터라 실제로 가중치행렬에서 입력단어와 관련된 부분은 행 하나밖에 없습니다. 앞 뒤 합쳐 10개의 단어가 들어와도 다른 단어면 가중치 행렬이 동일하더라도 계산에 관련된 부분들은 모두 독립적입니다.
책도 그렇고 강의도 차근차근 설명하셔서 좋네요. 근데 SimpleCBOW backward 에서 layer1과 layer2가 실제로 같은 Weight를 공유하고 있는데 이때 Matmul 의 backard에선 gradient를 누적을 안하고 업데이트를 해버리는 것 같은데. 그렇게 하면 안될 것 같은데. 이에 대하여 어떻게 생각하시는지요?
예리한 질문이네요. self.in_layer0.grads와 self.in_layer1.grads로 먼저 그레디언트를 각자 따로 보관한 후에요. trainer.py로 학습시킬때 common.trainer의 Trainer 클래스를 사용합니다. Trainer class를 보시면 fit 메서드에 다음 라인을 확인하실수 있을꺼에요. params, grads = remove_duplicate(model.params, model.grads) # 공유된 가중치를 하나로 모음 밑에 내려보시면 remove_duplicate 함수가 정의되어 있어요. 밑에 설명이 "매개변수 배열 중 중복되는 가중치를 하나로 모아 그 가중치에 대응하는 기울기를 더한다."로 되어 있습니다. remove_duplicate는 테크니컬한 부분이어서 큰 흐름을 깰수 있어서 word2vec 토픽이 끝날때 부록처럼 강의합니다. 나중에 언어모델에서 weight tying 기법을 사용하는데 그때도 적용됩니다.
감사합니다, 많은 도움이 되었습니다.
책 사놓고 진짜 한장한장 나가는거 너무 힘들었는데 강의와 자료들까지 공유해주셔서 너무 감사합니다 ㅠㅠ
사랑합니다 교수님!!!^^ 열심히 공부할께요
39:09 =4번 문제(데이터 셋의 교차 엔트로피를 구하는 문제)를 풀이하는 과정에서 log를 사용해 풀이를 진행하게 될 터인데, 로그의 밑을 결정하는 기준을 잘 모르겠습니다. 대학 이후의 과정에서 로그의 밑이 생략되는 경우, 자연상수 e이거나 2일 텐데, 교차 엔트로피는 정보이론에서의 확률분포의 거리를 재는 방식이라고 하니 밑을 2로 두어야 하는지 말아야 되는 지에 대한 구분이 어려워 기준 같은게 있는지 궁금합니다.
교재에서 대부분 명시를 합니다. 아무말도 안써져 있으면 e라고 생각하시면 됩니다. 데시벨, pH는 상용로그를 사용합니다. 로그 밑 변환 공식 때문에 일정한 리스케일링 차이밖에 안나기 때문에 본질적인 요소는 아닙니다.
강의 듣기 전에 일단 그랜절 한번 올리겠습니다
안녕하세요. 동시발생행렬에서 the, car이 서로 큰 값이 나오더라도 cosine similarity를 계산할 때에는 내적을 구하는 과정에서 the, car은 서로 0이 되어 상관계수가 크게 나오거나 하지는 않지 않나요? 그렇다면 동시발생행렬의 문제가 무엇인지 궁금합니다. 그리고 동시발생행렬->코사인 유사성을 이용하면 I eat pizza. I taste pizza. 등의 문장을 통해 eat과 taste의 유사성이 매우 높게 나와 정말 뜻이 유사한 단어의 유사성이 높게 나오는 반면, PMI에서는 size만큼 인접한 단어만을 고려하기 때문에 I hear music에서 hear과 music은 큰 값이 나올지언정 위 예시에서 eat과 taste처럼 주변에 유사한 맥락의 단어가 쓰이나 “eat taste ” 형태로 붙어 쓰이지 않는 유의어들은 행렬 값이 작게 나오지 않나요? 감사합니다.
you say goodbye and i say hello .으로 생각해보면요. you와 코사인 유사도가 높은 단어는 i입니다. 윈도우안에 say를 공유해서 you와 i를 내적하면 양수가 나옵니다. 존 퍼스의 철학을 따르면 you와 i가 모두 윈도우안에 say를 공유한다는 것은 say는 인격체가 주체가 되기때문에 you와 i가 인격체라는 것이 코사인 유사도로 계량적으로 반영되는 것이지요. 윈도우안에 단어를 공통으로 공유할수록 코사인 유사도 값은 커집니다. 비유를 하면 두 사람의 친구가 비슷하면 두 사람의 취미나 성격이 비슷하다고 할수 있는거죠. the car // car drive // taxi drive // truck drive // the flower를 생각해보겠습니다. 우리는 car, taxi, truck이 코사인 유사도가 높기를 기대하고 car, flower는 코사인 유사도가 낮기를 기대합니다. car, taxi, truck은 윈도우 안에 공유하는 단어가 drive죠. drive는 자동차류랑 관련이 있어서 drive를 공유한다는 것은 큰 범주안에 자동차일 가능성이 높습니다. 그런데 car와 flower는 the를 공유하지만 둘은 상관이 크게 없습니다. 그냥 명사정도죠. the는 사람으로 치면 인싸입니다. 인싸랑 친구한다고 특별히 그 사람에 대해 알수 있는게 없습니다. 그런데 아웃사이더랑 친구가 된다면 둘이 먼가 통하는 게 있을겁니다. 그래서 인싸는 비중을 줄여서 코사인 유사도가 비슷하게 나타나게 하는 역할을 못하게 하는게 합리적입니다. 아싸는 비중을 키워서 코사인 유사도가 비슷하게 나오도록 하는 역할을 하는게 합리적이구요.