(4강) 모델의 시공간
미니코드
def binary_search_iterative(array, element) :
mid = 0
start = 0
end = len(array)
step = 0
while start <= end :
print(f"Subarray in step {step} : {str(array[start:end+1)})
step += 1
mid = (start + end) // 2
if element == array[mid] :
return mid
elif element < array[mid] :
end = mid - 1
else :
start = mid + 1
return -1
binary_search_iterative([i for i in range(9)], 2)
Space and time
Problem Space는 Initial Space에서 Terminal Space를 포함하는 개념이다. Problem Solving을 통해 Terminal Space에 도달하는 과정이 Decide이고, 이 과정을 Feasible Region이라 표현한다.
이렇게 문제를 풀어가는 과정은 문제의 난이도와 관계가 있다. 문제의 난이도를 P, NP와 같은 형태로 나타내는데 이는 Time Complexity와 관계가 있다.
문제를 풀어가는 과정을 Entropy와 연관지어 생각할 수 있다. 무질서도를 의미하는 Entropy는 시간이 지날수록 증가하는 특성을 갖는다. 우리가 가진 Data를 통해서 Decide를 수행하는 과정은 시간적으로 역행하는 것으로도 생각 할 수 있다.
Parameter search
과거에는 모델의 설계에 있어서 사람이 차지하는 비중이 매우 높았다. DL 이전에는 Data의 Feature를 직접 추출하여 활용하는 형태를 가졌으나, 요새는 이 모든 과정을 Model이 수행하고 있다.
DL모델은 스스로 Data를 잘 표현하기 위해 Parameter를 학습하고 있다. 이 과정에 인간의 개입은 전혀 필요치 않은 상황이다. 더 나아가서 요새는 Architecture의 Search까지 Model이 수행하고 있다. 또한, Hyper-parameter까지 Model이 Search하는 형태의 연구가 진행되고 있다.
Parameter란, 다차원 공간의 Data를 특정 차원으로 표현하는데 사용된다. 이 다차원 공간의 개념으로 보았을 때, 데이터와 모델 그리고 출력 모두 공간상의 점으로 이해할 수 있다.
이러한 이해의 측면에서, Model의 구조의 개선은 Optimization Problem으로 이해할 수 있다.
Hyper-parameter search
아직까지 많은 경우에 Hyper-parameter는 개발자의 실험과 연구를 통해 결정되고 있다. 이 과정의 어려움은, Hyper-parameter에 따른 변화를 측정하는 Cost가 높다는 것이다. 위와 같은 이유 때문에 우리는 모든 경우의 수를 탐색할 수 없고, 효율적인 방법으로 좋은 성능의 Hyper-parameter를 찾고자 한다.
Surrogate Model은 Hyper-parameter set와 이를 통해 학습한 Model의 결과를 Pair로 학습하여, 좋은 모델을 찾고자 하는 방법이다.
Gaussian Process는 Random한 Hyper-parameter를 통해 결과를 출력하고, 탐색했을 때 용이하다고 판단되는 부분을 탐색하는 형태의 탐색 방법이다.
Neural Architecture search
NAS는 Model의 Architecture 자체에 대한 탐색이다. 단순히 Hyper-parameter를 바꾸는 것이 아니라, 구조를 변화시켜 다양한 목적을 달성한다.
Model Size나, Inference Time과 같은 Multi Object를 목적으로 다양한 기법을 적용해 Model의 구조를 바꿔보는 것이다.
즉, NAS는 Model Architecture에 대한 Optimization Problem을 해결하는 Model이다.
NAS for edge devices
MnasNet은 Mobile에 Model을 이식하기 위한 다양한 Object를 Search하는 Model이다. 강화학습의 방법을 통해서 다양한 Architecture를 탐색하는 형태로 구현되어 있다.
이전에 사용하던 Proxy Model은 Model의 전체 구조를 사용하지 않고, 일부의 Layer만 활용하거나 하는 형태로 수행 되었다. 이와 같은 시도는 실질적으로 해당 Model 전체에 대해 적용했을 때 다른 결과가 나오는 경우가 있었다. 이후 ProxylessNAS 논문에서는 이와 같은 부분을 지적하며, NAS의 방법을 제시한다.
MobileNet은 Mobile 환경에서 구동 되는 것을 목표로 한 유명한 Model이다. Accuracy와 같은 성능을 최대한 유지하면서 Cost를 최소화하는데에 중점을 둔 연구이다. 대표적으로 사용된 기법은 Depth-wise Separable Convolution이다.
토이 코드
(5강) 알뜰히
압축 (Compression)
압축은 기본적으로 복구여부에 따라 비손실 압축과 손실 압축으로 구분된다.
압축의 방법은 다양하나, 대표적으로 Huffman Coding을 예로 들 수 있다. 이 방법은 등장 빈도에 따라 다른 길이의 Code를 부여하는 방식으로 효율적인 압축률을 보여준다.
부호 (Coding)
Coding이라 함은, Original을 특정 Code Book 혹은 Rule에 따라서 변환하는 것을 의미한다. 이 과정에서 변환된 Code가 Original 보다 작다면, 이를 압축(Compression)이라고 표현한다. 즉, 압축은 Coding의 부분적인 개념이다.
특정 Code Book이나, Rule에 따라 정보가 변환되는 Coding은 Computer Science 전체에 적용할 수 있는 개념이다. Computer의 모든 요소는 Language로 되어 있으며, 조립 방식에 따라 Program이 될수도, Machine이 될 수도 있는 것이다. 앞서 살펴보았던 것처럼, 다차원 공간의 Data를 저차원 공간의 Target으로 변환하는 Model의 활동도 Coding이자, Compression으로 이해할 수 있다.
부호화 (Encoding)
Encoding은 Coding을 하는 것으로 이해할 수 있다.
우리는 이를 Entropy와 KL div를 통해 조금 더 깊게 이해할 수 있다. KL div는 두 확률분포의 의미상 거리를 측정하는 방법이다. 수식에서는 Cross-entropy에서 Entropy를 빼는 식으로 구성되어 있다. Cross-entropy는 실제 확률분포의 Code Book과 Model의 Probability를 곱해서 구해지고, Entropy는 실제 확률분포를 사용한다.
압축률 (Compression rate)
압축률은 다양한 Matric을 통해서 확인할 수 있다. 모델의 Speed, Compression Rate, Accuracy 등 복합적인 Object를 통해 압축의 효율성을 판단한다.
토이 코드
'네이버 부스트캠프 AI Tech' 카테고리의 다른 글
| [U] Day 39 - Lightweight IV (0) | 2021.03.28 |
|---|---|
| [U] Day 38 - Lightwieght III (0) | 2021.03.28 |
| [U] Day 36 - Lightweight I (0) | 2021.03.28 |
| [U] Day 35 - CV V (0) | 2021.03.26 |
| [U] Day 34 - CV IV (0) | 2021.03.26 |
Uploaded by Notion2Tistory v1.1.0