연세대 인공지능학회 YAI

[CS231N] Lecture 15, 16 본문

강의 & 책/CS231N

[CS231N] Lecture 15, 16

_YAI_ 2023. 3. 12. 15:01

CS231N, Spring 2017 : Lecture 15,16

https://www.youtube.com/playlist?list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk 

 

Stanford University CS231n, Spring 2017

CS231n: Convolutional Neural Networks for Visual Recognition Spring 2017 http://cs231n.stanford.edu/

www.youtube.com

*YAI 11기 김남훈님께서 "기초심화" 팀에서 작성하신 글입니다.


Lecture 15 : Efficient Methods and Hardware for Deep Learning

현재의 AI가 직접적으로 실생활에 응용되려면 다음과 같은 문제가 해결되어야 한다.

  1. Model Size
    OTA(Over The Air) Update를 하기에 지금 모델은 너무 무겁다
  2. Speed모델이 커질수록 학습시키는데에 많은 시간이 필요하고 이는 생산성을 낮추는 요인이 된다.
  3.  
  4. Untitled 1
  5. Energy Efficiency
    AI 모델은 많은 전력을 필요로 하기에 모바일기기에서는 배터리타임 단축, 실제 고성능 모델에서는 천문학적인 전기세의 요인이 된다.

Algorithm and Hardware Design for Efficiency

앞서 살펴 보았듯 이러한 문제를 해결하기 위해 Algorithm이나 Hardware를 바꿔야 할 필요가 있다.

Untitled 2Untitled 3

ASIC은 로직이 고정되어 있는 반면에 상당히 좋은 성능을 발휘한다. Google의 TPU는 ASIC으로 개발되었다고 볼 수 있다.

또한 32FP보다는 16FP, 16int보다는 8int를 사용한다. 이는 결국 Energy cost가 더 낮아지기 때문이다.

또한 다양한 알고리즘을 적용하여 모델의 복잡도를 낮추거나 연산의 복잡도를 낮출 수 있었다.

  1. Pruning

Untitled 4Untitled 5

가지치기를 하듯이 쓸모가 없어진 뉴런에 대해서는 없애버리는 작업이다. 모델의 복잡도는 획기적으로 줄어들지만 pruning하는 비율에 따라서 정확도에 차이가 생기기 시작한다. 이를 해결하기 위해서 pruning을 한 이후에 다시 training을 하면 성능을 유지할 수 있었다. 추가적으로 Iteratively retraing하면 더욱 많이 pruning을 해도 성능이 더 잘 유지되는 것을 확인할 수 있었다.

또한 RNN과 LSTM의 구조가 있는 image captioning model에서도 잘 작동하는 것이 확인되었다.

이것을 사람에 빗대어 해석해보자면 1살짜리 아기의 뉴런수가 청소년보다 많은 것과 비슷하다고 볼 수 있다. Weight Distribution은 다음과 같다.

Untitled 6

  1. Weight Sharing

Untitled 7

일종의 Quantization method다. 2.3, 1.9 등의 weight값은 2와 크게 차이가 없는 것을 이용하여 index book을 만들고 그것을 기준으로 비슷한 weight들을 같은 weight값으로 지정하는 방법이다.

학습을 진행할 때에는 위와 같이 centroid를 구한 뒤에 각 group의 합을 fine-tune시켜주는 방식을 이용한다.

Untitled 8

그래서 이것을 이용해 자주 나오는 weight는 적은 bit로 할당하고 적게 나오는 weight는 큰 bit로 할당하여 연산량을 줄이는 방법을 고안할 수 있었다.

Untitled 9

위의 방식을 모두 이용하면 무려 35x~49x배나 모델을 줄일 수가 있어진다. 중요한 점은 이렇게 압축을 했을 때 모델의 성능이 유지되냐인데 강연자는 이렇게 했음에도 불구하고 성능이 유지된다고 하였다.

Untitled 10

  1. Quantization

Weight들을 quantization하여 저장하는 방식이다.

  1. Low Rank Approximation

Untitled 11

GoogLeNet에서 봤던 것과 비슷한 형식이다. 결과적으로 Weight를 구성하는 행렬의 Rank를 낮추는 방식을 이용한다.

Untitled 12

또한 FC layer에서도 SVD를 이용하여 matrix를 나누는 방식으로 Low Rank Approximation을 할 수있었다.

  1. Binary / Ternary Net

Untitled 13

Quantize method와 비슷하게 normalized weight를 -1, 0 ,1로 quantize하여 이것으로 backpropagation을 하여 학습을 시키는 방식이다.

  1. Winograd Transformation

Untitled 14

convolution자체가 연산량이 많아지는 주 요인이니까 filter를 조작하여 convolution의 연산량을 줄이는 algorithm이다.

DNN Accerleration

Untitled 15

어떠한 weight들이든 0이 있는 경우가 많다. 이것을 다 일일이 matrix multiplication을 하는 것이 연산량의 복잡도를 늘릴 수 있으므로 0이 있는 경우에 대해서는 계산을 하지 않는 방식을 이용하여 연산량을 줄이는 방식이다.

Data Parallel

Data를 여러개로 나누어 병렬로 처리하는 방식이다. 나누는 방식자체는 누구나 생각할 수 있으나 이렇게 되었을 때 어떻게 각각에서 학습되는 parameter를 공유할 수 있는지에 대한 문제가 생긴다. Parameter update방식은 다음과 같다.

Untitled 16

Convolution에 대해서도 나눠서 진행할 수 있는데 이는 아래 그림과 같다.

Untitled 17

Mixed Precision

Untitled 18

연산자체는 복잡도가 낮은 FP16에서 처리하고 Weight Update만 FP32에서 진행하는 방식이다.

이외에도 Teacher Student와 DSD라는 방식이 소개되고 있다.

Lecture 16 : Adversarial Examples and Adverserial Training

AI기반으로 학습된 네트워크들은 이상하게도 노이즈가 추가되거나 제거되거나 했을 때 인간과 다르게 misclassification을 하는 오류를 낸다. 이번 강의에서는 이러한 Attack에 대해 알아보고 모델의 Robustness를 올리기 위한 방법들을 소개한다.

Untitled 19

사람이 보기에는 다를게 없는 사진인데 AI 모델은 각 그룹의 우측하단의 그림을 “Airplanes”로 인식하고 있다. 이것이 AI 모델의 취약점이다. 이렇게 AI모델이 헷갈려할 만한 그림을 만드는 것은 다음과 같은 알고리즘을 사용하면 쉽게 구현이 가능하다.

Untitled 20

위 알고리즘은 Backpropagation으로 모델을 학습시킬 때 추가적으로 명시해주면 되기 때문에 모델에 적용시키기가 상대적으로 쉽다고 할 수 있다.

그래서 이러한 Adverarial attack에 대해 robustness를 높이려면 어떻게 해야 할까? 이 data들에 대해서도 학습을 시키는 방법으로 해결을 할 수 있다.

Untitled

보면 adversarial data에 대해서 train을 한 모델이 더 높은 정확도를 나타내는 것을 확인할 수 있다.

Disscusion

Q) Pruning에서 weight를 deactivate 시킬 때, 어떠한 방식을 사용하는가?

Weight값이 쓸모없는, 0에 가까운 것들을 지우고 그것들이 연결되어 있는 뉴런을 지우는 방식을 사용한다. 일종의 L1 regularization과 비슷한 느낌이다.

Q) Pruning 후에 Retraining을 하면 0 근방에서 weight가 잘 나타나지 않는데, 처음에 training을 할 때는 0근방에서 weight가 많이 나타나는 이유

0근방의 weight들은 pruning과정에서 다 사라지기 때문이다.

Q) Quantization 과정에서 gradient를 다 더해주는 이유

모델의 정확도를 높이기 위해서이다.

Q) Parallelism에서 model region을 나눌 때, model region사이에서 filter계산이 누락되는 문제는 어떻게 해결하는가?

아마도 해당 경계의 계산을 할 때만 이동한 만큼 kernel size를 조절하여 나중에 붙이거나, 애초에 region을 바로 자르는게 아니라 kernel size만큼 대비하여 조금 더 넓게 잘라서 계산을 하는 것으로 추측된다.

'강의 & 책 > CS231N' 카테고리의 다른 글

[CS231N] DNN 기초  (0) 2023.01.14
[CS231n] Training Neural Networks II, Deep Learning Software  (0) 2022.05.01
Comments