해당 포스팅은 네이버 부스트캠프 AI Tech 학습 정리 자료임을 알려드립니다.
1. 강의 정리
이번 주 강의 내용은 추후 논문 등을 찾아보며 추가할 예정입니다. 읽으시는 데 불편함이 있을 것으로 예상됩니다. 이해를 부탁드립니다.
홍원의 마스터 - 모델의 시공간
1) Space and time
Space는 공간이라는 뜻을 가지고 있지만, 저희가 학습해가는 과정에 대해 생각해보면, 초기상태가 원하는 결과 상태로 만들어지는 모든 과정을 Space라고 합니다. 이 과정 속에서 답이 될 수 있는 후보들의 집합을 Solution space라고 할 수 있습니다. 예를 들어, 배고픈 사람 A가 있을 때, 배를 부르게 할 수 있는 방법은 수도 없이 많습니다. 햄버거가 될 수도 있고, 콩나물 국밥이 될 수도 있습니다. 이처럼 배고픈 상태에서 배부른 상태로 만드는 과정을 Problem Space, 배고픈 사람이 고를 수 있는 다양한 메뉴들은 Solution space가 될 수 있을 겁니다. Solution space는 search space, feasible region 등 다양한 단어로 불립니다.
시간 복잡도(time complexity)는 보통 알고리즘 문제를 풀다보면, $O(n)$, $O(log n)$처럼 표현하는 것을 볼 수 있습니다.
보통 space-time, time-memory tradeoff는 항상 존재합니다. 작은 Space에서 문제를 풀기 위해서는 시간이 많이 필요하고, 시간을 적게 사용하고 문제를 풀기 위해서는 많은 용량이 필요합니다. 이처럼 tradeoff는 항상 발생합니다.
엔트로피는 무질서한 상태를 말하는데, 예를 들어, 고양이와 개를 분류해야 한다고 합시다. 초기에 주어지는 데이터셋은 굉장히 무질서한 상태이기 때문에 높은 엔트로피를 갖습니다. 여기에 우리가 가지고 있는 모델로 에너지를 쏟게 되면, 개와 고양이가 분리된 상태의 낮은 엔트로피를 가질 수 있습니다.
2) Parameter search
우리는 산업혁명 이전에는 직접 사용할 도구를 만들고 직접 도구를 사용하는 형태가 주를 이뤘습니다. 산업혁명 이후로는 직접 제품을 만들면 만들어진 제품이 알아서 작동에 의해 동작하도록 변경되었습니다. 최근에는 일부의 architecture만 설계해주면, 알아서 컴퓨터가 학습하고 알아서 동작하게 되었습니다. 이처럼 시대가 발전해가면서 사람이 정해주는 hyperparameter의 갯수는 줄어가고 있습니다. 이러한 관점에서 Parameter search는 대표적으로 gradient를 통해 minimization loss를 구하는 것을 들 수 있습니다. 우리가 어떤 Array에서 binary search를 통해서 원하는 숫자를 찾아나가는 과정처럼 각 step에서의 gradient값을 global minimization으로 가도록 만드는 것과 비슷한 과정입니다. 하지만, 이 방법은 최적해를 보장하지 않는다는 단점이 있습니다.
3) Hyperparameter search
하이퍼 파라미터에 해당되는 것들에는 Learning rate나 batch size 같은 것을 예로 들 수 있습니다. 보통 이러한 최적의 값을 구하기 위해서는 반복적인 학습을 통해 구합니다. 그치만 이러한 과정은 많은 비용이 소모됩니다. 그래서 이것을 찾아주는 방법으로 Grid search, Random search, Bayesian Optimization 방법도 존재합니다. 자세한 내용 다음에 추가하도록 하겠습니다.
4) Neural Architecture search
수많은 모델 중에 어떤 것을 사용해야 할지 모를 때가 많습니다. CNN 모델도 사람에 의해 검증된 모델도 많이 존재하지만 NAS방법은 우리가 흔히 아는 형태의 모델과 다르게 기형적인 모형을 만들어 냅니다.
5) NAS for edge devices
NAS 방법을 사용해서 Edge에 적용한 MnasNet의 경우에는 사람이 만든 MobileNetv2와 비교해서 비슷한 인퍼런스 속도를 가지지만 Top 1 accuracy는 더 높게 얻을 수 있습니다. 이외에도 PROXYLESSNAS, ONCE-FOR-ALL과 같은 방법도 있습니다.
홍원의 마스터 - 알뜰히
1) 압축(Compression)
압축이라고 하면 많이 익숙한 파일을 다른 사람에게 보낼 때 주로 사용하는 방법입니다. 압축에는 비손실 압축과 손실 압축 2가지가 존재합니다. Huffman coding이라는 압축 알고리즘은 문장을 숫자로 바꿔주는 형태의 codebook을 자주 등장하는 요소에 대해서는 짧게, 자주 등장하지 않는 것에 대해서는 길게 적용하는 방법을 사용합니다. 이를 통해 더 효율적인 압축이 가능합니다.
2) 부호(Coding)
'ABC'라는 메세지를 다른 사람에게 Encoding을 통해서 '123'으로 전달하고, '123'을 Decoding해서 'ABC'로 바꾸는 형태를 보통 가집니다. 이렇게 전달하는 과정 속에서 변환은 coding에 의해서 이뤄지게 됩니다.
Finite State Machine이라는 컴퓨터 작동원리가 존재합니다. input state가 들어와서 들어온 상태가 어떤 지에 따라 Machine 내부에서 움직이게 됩니다. 이러한 과정은 다양한 곳에서도 자연스럽게 적용되고 있습니다. 고객이 서버에 어떤 정보를 요청하는 과정이 있으면, 그에 대한 응답을 서버는 고객에게 전달해주는 방식이 있습니다. 이외에도 Operating system, Machine Learning에서도 동일하게 적용되고 있습니다.
3) 부호화(Encoding)
부호화는 우리가 알고있는 것을 다른 것으로 변환시켜서 전달해줄 때, 인코딩한다고 표현합니다. 우리가 배우는 딥러닝에서는 어떤 것이 존재할까요? 자연어 처리를 예로 들면, 사람이 알 수 있는 언어를 컴퓨터가 알아볼 수 있도록 숫자로 변환하는 과정도 encoding에 해당됩니다. 이미지 분류라고 했을 때, 우리가 결과로 얻게 되는 One-hot vector는 우리가 알고 있는 클래스명으로 되어 있지 않고 숫자로 표기되어 있습니다. 이것 또한 Encoding의 한 종류라고 볼 수 있습니다.
4) 압축률(Compression rate)
경량화에서는 다양한 Metric을 기준으로 성능평가를 합니다. 대표적으로는 Compression rate, Space saving rate, Speedup rate를 예로 들 수 있습니다. 압축률은 경량화 이전의 모델에 비해 얼마나 파라미터수가 줄었는지를 표현하는 것입니다. 보통 논문에서 등장하는 압축방법에는 pruning, quantization, Huffman coding이 존재하고, 하나를 적용했을 때보다는 복합적으로 사용했을 때, 압축률이 더 좋은 것을 확인할 수 있습니다.