2021년 3월 29일 월요일

AITech P-stage1 [Day 1] 모델구성과 data payload 고민 작성중..

 

============================

강의 내용


목적을 이해하는 행위 EDA(Exploratory Data Analysis)

각 셀들에서도 목적이 있다. 호기심 나열. 어떻게 써야할지. 코드 구현.


개요를 잘 보자. 왜 대회를 열었는지 목적. 방향을 볼 수 있다.


=========================

목표

딱히 없었음. 대회 코드 보고 데이터 분석하고 할 수 있으면 모델 넣고 결과만 보자. 간단해도 되니까.


=============================

행동

그래서 첫주인 만큼 환경세팅을 했다.

예전에 titanic 분석할 때 사용했었던 것들을 한번 사용해 보았다. 특이한건 나이 분포가 중간이 움푹 패어있지만 대회에서 요구하는 나이대로 나누면 비율이 반대가 된다는 것. 이게 성급한 일반화의 오류가 아닐까.

또 사전 학습한 모델을 활용하려고 예전에 style transfer 코드를 따라쳐본게 있다. 그걸 응용해서 모델을 구성했다. 왜 사전학습으로 했냐면 피어세션에서 그냥 했더니 정확도가 아주 안나왔다는 말이 생겨서. 또 모델은 대체적으로 앞의 layer들은 전체적인 지식을, 뒤로갈수록 문제에 최적화된 지식을 가지게 되니까 cnn이 16개 나오는데 뒤의 1/4부터만 weight가 바뀌게끔 만들었다. 성공적인지 아닌지는 아직 모델에 이미지 통과도 못시켜봐서 모름.

그래서 지금 data payload를 만들고 있는게 고민이 있다. 이미지와 라벨을 dataset에서 묶는건지 하는지 dataloader에서 묶는건지. 또 이미지들이 폴더별로 분류되어 있던데 예전에 했던 과제처럼 모두 다른곳으로 꺼내야 할지 결정을 못하겠음. 꺼내면 폴더 이름에 라벨 정보가 들어있는데 라벨을 어떻게 할것이며 등이 고민임.

=======================================

회고

사실 공부하기가 싫어 딴짓을 많이 했다. 하기 싫을 땐 노래라도 들으면서 해야겠다.


2021년 3월 19일 금요일

AITech 학습정리-[Day 40] 행렬 분해 / 돌아보기

 

=================================

학습내용

(10강) 행렬 분해

https://openaccess.thecvf.com/content_CVPR_2020/papers/Kossaifi_Factorized_Higher-Order_CNNs_With_an_Application_to_Spatio-Temporal_Emotion_Estimation_CVPR_2020_paper.pdf

수치해석 시간에 배웠던 행렬분해. neural network 때문에 tensor로 확장했다고 함.




https://en.wikipedia.org/wiki/Low-rank_matrix_approximations
https://en.wikipedia.org/wiki/Kernel_method

행렬을 분해시켜 low rank로 만들어서 시간복잡도를 줄이려고 하는 것 같다.


https://en.wikipedia.org/wiki/Kernel_(linear_algebra
https://medium.com/@zxr.nju/what-is-the-kernel-trick-why-is-it-important-98a98db0961d

https://www.quora.com/What-are-kernels-in-machine-learning-and-SVM-and-why-do-we-need-them/answer/Lili-Jiang?srid=oOgT

두 점 사이의 관계된 정도를 구할 때 dot product로 구한다고 한다. 근데 원래 평면에 있는걸 정의로 해서 고차원으로 바꾸고 그걸 dot product로 해서 구하는 방식이었는데, 이렇게 하니까 계산 비용이 너무 많이 든다. 그래서 저차원인 상태에서 구하자. 하는 듯.




이를 신경망에서도 이용. weight들이 너무 많이 연결되어있어 계산량이 많을 경우 분해해서 계산한다.

https://arxiv.org/pdf/2008.05441

https://en.wikipedia.org/wiki/Matrix_decomposition#Singular_value_decomposition
http://ki-it.com/xml/16456/16456.pdf

https://intoli.com/blog/pca-and-svd/

U,V 분해로 행렬분해하는걸 넘어 자르기도 함. 아얘 파란색을 버리고 만들어서 사용함.



eigen value랑 vector는 affine하면서 행렬이 변해도 변하지 않는 값, 방향.

https://bkshin.tistory.com/entry/%EB%A8%B8%EC%8B%A0%EB%9F%AC%EB%8B%9D-20-%ED%8A%B9%EC%9D%B4%EA%B0%92-%EB%B6%84%ED%95%B4Singular-Value-Decomposition
https://www.quora.com/What-is-the-difference-between-PCA-and-SVD

M = UEV로 어쨋든 같은 변환.


https://youtu.be/L8uT6hgMt00


https://en.wikipedia.org/wiki/Higher-order_singular_value_decomposition
https://staffwww.dcs.shef.ac.uk/people/H.Lu/MSL/MSLbook-Chapter3.pdf

https://www.slideshare.net/SessionsEvents/tamara-g-kolda-distinguished-member-of-technical-staff-sandia-national-laboratories-at-mlconf-sf-2017-81995753

분해해서 쓰더라.


https://towardsdatascience.com/review-mobilenetv2-light-weight-model-image-classification-8febb490e61c
https://openaccess.thecvf.com/content_cvpr_2018/papers/Sandler_MobileNetV2_Inverted_Residuals_CVPR_2018_paper.pdf

mobilenet v2부터 이런 방식을 채용하더라.

https://arxiv.org/pdf/1808.05517.pdf

mobilenet 에서 직관으로 세웠던 모델을 수학적으로 증명. 관심있으면 봐라.





(11강) 돌아보기


ppt 보자.


http://egloos.zum.com/agile/v/2854698

https://brunch.co.kr/@laftworld/12






=============================

과제

https://colab.research.google.com/drive/14WkeOtR5Z3oaFMB0gAVdASVFCFc8meBB?usp=sharing

transfer learning 경량화 t와 sigma에 따른 차이


================================

피어세션

네이버. 하면서 느낀점. 코테는 비교적 쉽지만 서류, 면접이 극도로 어렵다.

상시채용보다 공채가 붙을 확률이 높음.

임원면접. 인성만 보는게 아니라 라이브코테. CS지식. 하나를 알더라도 깊게 알아야 한다. 꼬리물기.

it는 과정을 중요시 하는 듯. 수상경력 없는데도. 개발경험으로 도배했더니 되더라. 신입은.


=============================

후기

없음

2021년 3월 18일 목요일

AITech 학습정리-[Day 39] 양자화 / 지식 증류

 

================================

학습내용

(8강) 양자화

이번 강의는 관심이 없어서 그런지 머리에 하나도 안들어왔다.

그래서 필요성을 약간이나마 느낀것들을 정리하려고 한다. 필요하면 그때 찾아야지..


float 저장 방식으로 생기는 오류들.


https://youtu.be/DDelqfkYCuo

근데 양자화 시키면 미분 불가능하니까 못하는거 아니냐? 할 수 있어서 적당히 양자화 시키는 것도 있음.

https://openaccess.thecvf.com/content_CVPR_2019/papers/Yang_Quantization_Networks_CVPR_2019_paper.pdf


https://www.tensorflow.org/lite/performance/post_training_quantization
https://talkingaboutme.tistory.com/entry/Embedded-DL-Tensorflow-Lite-Quantization

하드웨어마다 되는게 있고 안되는게 있으니까 보고 판단하자.

https://wannabeaprogrammer.tistory.com/42


https://www.tensorflow.org/lite/performance/model_optimization#why_models_should_be_optimized
https://stackoverflow.com/questions/60883928/quantization-aware-training-in-tensorflow-version-2-and-batchnorm-folding

https://arxiv.org/pdf/1806.08342.pdf



실습

https://drive.google.com/file/d/1dzvkQLKRLLdAxfmd4imFs1F3CN_urHNo/view?usp=sharing

pytorch에서 모델에 quantize 하는방법.



(9강) 지식 증류


https://ppss.kr/archives/230096
https://www.researchgate.net/figure/Significance-of-decision-compared-to-knowledge-on-project-see-47_fig2_273983243

솔직히 모델설계랑 별 관련 없는것 같긴 한데.. 프로젝트 시작한지 얼마 안됐을 때 많은 결정을 해보자. 그만큼 피드백도 빨리 받고 발전도 빨리 된다는듯.


https://opentutorials.org/module/3653/22995

sigmoid의 기원.



기존에 배운 transfer learning이랑 비슷한 teacher student 방식을 쓰는 knowledge transfer. 다른점은 무거운 모델에서 가벼운 모델로 학습을 한다는 것. 이렇게 teacher 모방하는 방식이 student가 혼자 쌩으로 학습하는 것 보다는 나은 성능을 보이더라.

https://intellabs.github.io/distiller/knowledge_distillation.html
https://arxiv.org/pdf/1503.02531.pdf

전에 했던 transfer learning이랑 비슷하다. T가 뭔지는 밑에서 알려주겠다.

https://www.ttic.edu/dl/dark14.pdf
https://arxiv.org/pdf/1503.02531.pdf

옛날엔 정답만 1, 나머진 0으로 놓고 학습했었다. 근데 그렇게 하는게 맞는가? 싶어 softmax로 살펴보면 정답이 아니어도 정답과 비슷한 것 끼린 높은 점수가 나오고 전혀 관련이 없으면 매우 낮은 점수가 나온다. 이런 정답끼리의 유사한 정도도 학습하는게 좋겠다.

https://github.com/kmsravindra/ML-AI-experiments/blob/master/AI/knowledge_distillation/Knowledge%20distillation.ipynb

그래서 아까 위에서 봤떤 T가 극단적으로 1! 0.9999! 이런게 아니라 정답이어도 적당히 점수를 낮추고 비슷한 답은 상대적으로 올려서 학습하는 정도.

https://en.wikipedia.org/wiki/Knowledge_distillation
https://math.stackexchange.com/questions/1888141/why-is-the-softmax-function-called-that-way

https://arxiv.org/pdf/1503.02531

zi인 distilled model이 student고 cumbersome model인 teacher 가 v. 둘이 유사하게 맞춘다는게 핵심인 것 같다.

https://pythonawesome.com/a-clean-pytorch-implementation-to-run-quick-distillation-experiments/

수 많은 distillation 방법들이 있다.

https://arxiv.org/pdf/1904.01866.pdf

얘는 distill layer를 지금까지 relu 뒤에만 뒀는데 앞에 두는건 어떨까 하는거.

https://arxiv.org/pdf/1710.07535.pdf

student에게 가르쳐줄 때 데이터가 없거나 거의 없이 훈련시킬 수 있을까? 하는거.


실습

https://drive.google.com/file/d/16DxGDOXs-DGHlqmTWqyV5ZhCQ6dL6qVa/view?usp=sharing

teacher child 모델 어떻게 훈련하는지 코드로 잘 설명해준다.


=================================

과제


돌리는중..

실습때와 같이 knowledge transfer를 어떻게 하는지 잘 보여줌.




=================================

피어세션

수업 복습해봄.

==================================

후기

할 일을 차근차근 하자.