해당 포스팅은 네이버 부스트캠프 AI Tech 학습 정리 자료임을 알려드립니다.
1. 강의 정리
홍원의 마스터 - 가벼운 모델
1) Decision making
결정에는 연역적(deductive) 결정과 귀납적(inductive) 결정 2가지가 존재합니다. 보통 우리가 문제를 정의하고 데이터를 통해서 추론하거나 데이터를 통해서 모델을 만들어서 추론하는 것은 귀납적 결정방법에 해당됩니다.
2) Decision making machine
Decision making machine은 결정기라고 부르는 데, 청소기나 충전기 등은 사람을 대신해주는 것을 부를 때 ~~기라는 말이 붙습니다. 하지만, 이러한 물건들은 결정의 기능이 따로 존재하지 않는 경우가 많습니다. 그래서 보통 사람에 의해서 작동되는 형태이지만 우리가 배우는 내용들의 대부분은 결정기에 해당됩니다. 말 그대로 결정을 대신해주는 것으로, 로봇청소기가 대표적인 결정기를 가지는 것이라고 볼 수 있습니다.
강아지나 고양이를 분류하는 것과 같은 일에는 적용되기가 쉽습니다. 하지만, 사람의 목숨이 걸려있거나, 책임을 져야하는 문제에 대해서는 적용하기가 쉽지 않습니다. 또한 자율주행 차도 이러한 문제에 해당될 수 있습니다. 엄청난 발전에 의해서 정확도가 올라가더라도 기계가 대신 결정해주지 못하는 가치의 영역도 있습니다.
3) Lightweight decision making machine
경량화는 필요한 것은 가지며, 덜 필요한 것을 버리는 과정이라고 할 수 있습니다. 보통 경량화의 과정은 데이터를 수집한 뒤 큰 모델을 학습시킵니다. 학습한 큰 모델을 작게 압축하는 과정을 통해 작은 모델을 만들고, 이 모델을 기기에 적용해서 다양한 도메인에 적용시키는 과정으로 진행됩니다.
최근에는 Tiny Machine Learning처럼 메모리와 저장소를 줄이는 연구도 진행되고 있습니다. 이렇게 경량화를 하게 되면 어떠한 장점이 있을까요? 가장 먼저 자율주행 자동차를 예를 들면, 자동차가 실시간으로 인식해서 다음 action을 해야 한다고 했을 때, 자체적인 모델이 없이 cloud로 보내서 받는 과정에 의해 action한다면 시간적인 측면에서 문제가 생길 수 있습니다. 반면, 미리 학습한 모델을 자동차에 부착시킨다면 Edge에 있는 모델에 의해 다음 action을 할 수 있습니다.
4) Backbone & dataset for model compression
하지만, 이러한 경량화 과정은 어떻게 검증할 수 있을까요? 보통은 torchvision 등 다양한 라이브러리에 있는 검증된 모델을 통해 경량화하는 경우가 많습니다. 이렇게 했을 때에는 기존의 검증된 모델이 존재하기 때문에 우리가 만든 모델과 비교해서 얼마나 성능이 좋아졌는 지를 확인할 수 있습니다.
5) Edge devices
보통 cloud service나 on-premise(자체 서버)를 했을 때에 엄청난 비용이 발생하고, 특히 cloud의 경우 사생활 문제와 항상 네트워크에 연결되어 있어야 한다는 문제가 있습니다. 반면, Edge device는 적은 비용과 사생활 문제, 혼자 동작할 수 있다는 장점이 있습니다. Edge device는 적은 비용과 사생활 문제, 혼자 동작할 수 있다는 장점이 있습니다.
6) Edge intelligence
Edge intellignece는 Centralized intelligence와 비교할 수 있습니다. 위의 그림처럼 좌측은 중앙 서버의 과중이 심한 것을 확인할 수 있습니다. 반면에 우측의 Edge intelligence의 경우 비교적 중앙 서버가 과중이 심하지 않습니다. 현재에도 Edge intelligence는 다양한 방면으로 연구가 지속되고 있습니다.
Edge intelligence에는 Edge Training, Edge Offloading, Edge Caching, Edge Inference 등이 있습니다. 그 중에 우리가 많이 다루게 될 내용은 Edge Inference입니다. Edge Inference를 적용하기 위해서는 Pytorch로 모델을 만든 뒤에 수많은 과정에 의해 Edge device에서 사용할 수 있습니다.
홍원의 마스터 - 팔리는 물건
1) 정방향, 역방향
강의를 듣고나서 왜 제목이 정방향과 역방향인지에 대해 생각하게 되었습니다. 어떤 개발자가 훌륭한 제품을 만들었을 때, 잘 팔릴까요? 아닐 수 있습니다. 그렇다면 고객의 요구사항을 반영해서 개발하면 문제가 없을까요? 그렇지도 않습니다. 저는 두 개 다 고려가 되어야 하는 것이라고 생각했습니다. 또한 공부하는 것에 대한 예시를 들어주셨는데, 보통 우리는 A를 공부해야지라고 생각하면서 A에 대한 강의를 먼저 보거나 책을 보는 경향이 있습니다. 어떤 문제를 풀어야겠다는 문제 정의를 통해 어떤 AI 기술로 그 문제를 풀어야겠다고 생각을 하는 사람들은 많지 않습니다.
우리가 어떤 것을 하는 것이 개발을 잘하는 것일까요? 대부분의 Software Engineer들을 대상으로 업무의 비율을 설문조사한 결과 다른 사람의 코드를 보고 찾는 과정은 80퍼센트에 해당하지만, 우리가 직접 코드를 수정하는 비율은 5퍼센트에 불과한 것을 확인할 수 있었습니다. 코드를 잘 작성하는 것만이 훌륭한 개발자라고 말하기엔 어려울 수 있다는 것입니다.
특히, 강의 내용 중 협업과 분업에 대한 차이를 보면서 많이 느낄 수 있었습니다. 마스터님은 분업은 모두가 잘한다고 가정했을 때, 가장 구현을 빠르게 할 수 있는 방법이라고 말씀하셨습니다. 하지만, 치명적인 단점으로는 그 어느 한 명이라도 자기 맡은 바 임무를 해결하지 못했을 때에는 전체적인 딜레이가 발생할 수도 있습니다. 그와 비교해서 협업은 모든 프로세스를 다 같이 알고 있기 때문에 각자가 시행착오 중 알게 된 유용한 사실이 있다면 구성원들에게 전달함으로 좋은 결과에 도달할 수 있습니다. 주어진 상황이 어떠한 지에 따라 두 개의 방법을 적절히 사용할 수 있어야 합니다. 주로 확실한 상황에서는 분업을, 불확실한 상황에서는 협업이 좋습니다.
2) AI에서
AI 모델에서는 모델링하는 것이 전부일까요? 그렇지 않습니다. AI 모델은 극히 일부분입니다. AI 모델에 대한 정확한 출력을 보장하지는 않습니다. 우리가 내부가 어떻게 동작하는 지 모르기 때문에 문제가 발생했을 때, 어디가 잘못되었는지 확인하기가 어렵습니다. 또한 동일한 데이터를 가지고 학습을 했더라도 학습된 일부 모델은 우리가 원하는 테스크에 적절하지 않을 수도 있다는 특성이 있습니다. 모델링하는 것 외에도 어떤 부분이 관심이 가는가에 대해 고민해보니, 저는 데이터셋이 중요하다는 생각이 많이 들어서, 모델을 만드는 개발자와 고객과의 커뮤니케이션을 하는 역할에도 관심이 많이 가는 것 같습니다.
3) On-device AI
최근에 AI Trend가 엄청나게 큰 모델을 통해서 정확도를 올리는 것을 집중하고 있습니다. GPT-3를 한번 학습하는 비용만 50억 원이 들어가는 것을 보면, 이러한 비용을 과연 일반 기업들이 지불하기 쉬울까요? 아마 어려울 것입니다. 모든 상황이 앞에서 말한 정확도 좋은 모델을 원하는 경우가 많을까요? 때로는 On-device가 괜찮을 경우가 많이 있습니다. 예를 들면, 공사장과 같은 지역이나 사막의 경우에는 인프라를 구축하는 것이 좋은 효과를 얻을 수도 없고 불가능할 때가 많습니다. 이런 경우 테블릿과 같은 on-device를 통해서 service를 제공한다면, 좋은 효과를 얻을 수 있습니다.
홍원의 마스터 - 가장 적당하게
1) Problem, computation, decision, and optimization
문제는 A라는 상황이 주어졌을 때, B라는 우리가 만들고 싶은 상황으로 바꾸어가는 과정을 말합니다. 그 과정 속에서 A가 A'이 되고 A'이 B'이 되고, B'이 B가 되는 중간 중간의 과정을 decision이라고 정의할 수 있습니다. 이것을 우리가 배우고 있는 딥러닝에 적용한다면, 고양이와 강아지가 섞여있는 상황(A)에서 고양이와 강아지가 분류된 상황(B)을 만드는 것이 문제이고, 그 사이에 존재하는 Neural Network가 decision이 되는 것입니다. Decision problem을 여러 번 반복해서 우리가 원하는 min val_loss를 구하는 것이 Optimization Problem이 됩니다.
2) Constraints
Constraints는 굉장히 중요한 요소입니다. A에서 B로 가는 경로가 다양하다고 했을 때, 시간의 중요한 사람의 경우에는 최단거리로 갈 수 있는 방법을 선택할 것이고, 돈이 덜 드는 방향으로 간다면, 시간은 조금 더 걸려도 무료로 갈 수 있는 방법을 찾을 것입니다. 이것처럼 무엇을 원하느냐에 따라 굉장히 달라지게 됩니다. Constraints는 우리가 모델을 만들 때, 많은 영향을 줍니다. 우리에게 V100같은 GPU가 엄청 많다면 가장 좋겠죠. 하지만, 이런 경우는 흔하지 않습니다. 우리에겐 정해진 resource가 있고 그 안에서 어떻게 최적화를 시킬 것인지 고민하게 될 것입니다.
모델 경량화를 위해서는 Pruning, Quantization, Knowledge Distillagtion, Filter decomposition과 같은 방법들을 활용해서 최적화하게 됩니다. 그렇다면 이렇게 우리가 모델링할 때, 비용에 해당하는 것에는 어떤 것들이 있을까요? Model size, Inference time, Training time, CO2 emission 들이 포함될 수 있습니다. 만약, 우리가 핸드폰에서 사용하게 될 경우 Inference time이 오래 걸리면 유저들이 오래 사용할까요? 아무리 좋아도 사용하지 않으려고 할 것입니다. 이처럼, 우리가 모델을 최적화할 때 다양한 비용을 고려해야 합니다.