합성곱 신경망은 이미지 인식에서 획기적인 발전을 불러온 알고리즘이다. 이 알고리즘은 합성곱층 Convolution layer에 대한 이해가 우선적으로 필요하다. 합성곱층을 공부하면서 패딩padding, 필터filter, 스트라이드stride, 풀링층Pooling layer도 함께 공부하자. - P178
합성곱 신경망의 기본적인 아이디어는 변수간의 지역적인 특성을 모델에 응축한다는 것이다. 이미지 데이터의 경우 각 픽셀 값들이 하나하나의 독립변수가 된다. 기존 심층 신경망의 경우 변수간의 관계가 독립적으로 학습이 된 것에 반해 합성곱 신경망은 변수간의 지역적 관계가 모델학습에 적용된다. 즉 심층 신경망이 바로 옆에 있는 픽셀 값들을 독립적으로 학습했다면 합성곱 신경망은 바로 옆에 있는 픽셀 값들은 모델에 함께 응축되어 학습되는 것이다. 이 역할을 해주는 것이 바로 합성곱층이다. - P179
수학적으로도 어떻게 합성곱 신경망이 동작하는지 공부해보도록 하자. - P179
순환 신경망은 시계열 데이터에 최적화된 딥러닝 모델이다. 악보와 같이 시간적으로 순차적인 데이터나 텍스트와 같이 의미상 순차적인 데이터도 모두 순환 신경망과 궁합이 잘 맞는다. 이전의 딥러닝 모델들은 모든 데이터들이 독립적이라는 가정을 했던 것에 반해 순환 신경망은 인풋변수들이 서로 순차적으로 상관관계가 있다고 가정한다. - P180
ht는 ‘은닉 변수hidden state‘를 뜻하는데 직전 시점의 은닉 변수ht-1을 받아 갱신되어 출력값에 영향을 끼친다. ht-1는 또 ht-2에 영향을 받기에 결국 ht는 적층적으로 이전 모든 시점의 은닉 변수값을 응축하고 있다. - P180
이 알고리즘(순환 신경망)의 최대 단점으로는 기울기 소실 문제 vanishing gradient problem가 있다. 쉽게 말하면 순환 신경망 셀들이 늘어나면 늘어날수록 거리가 먼 이전 시점의 데이터는 이후 시점에 영향을 끼치는 정도가 극도로 작아지는 문제이다. - P180
기울기 소실 문제를 해결하기 위해서 등장한 개념이 LSTM이다. 최근에 쓰이는 딥러닝 모델은 대부분 LSTM으로 대체되었다고 보면 된다. - P181
LSTM은 순환 신경망의 특수한 형태라고 보면 된다. 차이점은 시간 차이가 많이 나는 정보도 선별적으로 학습에 적용할 수 있다는 점이다. - P181
LSTM의 각 셀 안에는 망각 게이트가 존재한다. 이 망각 게이트는 이전 정보를 얼마나 보존할지 또는 얼마나 버릴지를 조절한다. 따라서 이 게이트를 통해서 단순 반복적 역전파가 실행될 때 기울기값이 급격하게 사라지거나 증가하는 문제를 방지할 수 있다. 수식으로 보면 좀 더 복잡하다. - P181
(LSTM의) 셀 안에는 3개의 게이트가 존재한다. 입력게이트는 현재의 정보와 이전 시점 은닉 상태를 기억하기 위한 게이트이다. 망각게이트는 기억을 삭제하기 위한 게이트이다. 마지막으로 최종 출력게이트가 존재한다. 각 게이트에는 시그모이드 또는 하이퍼볼릭탄젠트 함수가 쓰인다. 구체적인 계산 방법은 따로 공부하길 바란다. - P182
<오토인코더> 데이터 압축과 노이즈 제거에 자주 활용되는 알고리즘이다. 데이터의 차원이 너무 늘어나면 저장 및 전송에도 비효율적이고 모델을 학습할 때도 오히려 정확성이 떨어지는 단점이 존재한다. 이를 차원의 저주라고도 부른다. 따라서 데이터의 핵심 내용을 잘 보존하는 형태로 압축을 한다면 이러한 문제를 해결할 수 있을 것이다. 또한 압축하는 과정에서 노이즈 데이터들이 날아가면서 오히려 데이터의 품질이 좋아지기도 한다. 또한 데이터를 2차원 또는 3차원으로 압축하면 사람의 눈으로 볼 수 있는 시각화를 구현할 수 있다. - P183
여기까지 언급한 알고리즘들은 상세히 익혀두어야 한다. 그 후 최신 알고리즘을 보면 된다. 그러나 꽤 복잡한 최신 알고리즘을 완벽히 이해하기는 쉽지 않다. 머리를 싸매고 어찌어찌 수식까지 모두 이해했다고 하더라도 며칠 있으면 금방 잊어버리기 일쑤다. 따라서 최신 알고리즘이 이전 알고리즘에 비해서 어떤 점이 다른지 특징과 장점만 빠르게 익히고 넘어가도 된다. - P184
코드까지 직접 구현하기기는 무리다. 예를 들어 Yolov3를 파이토치 Pytorch 모델로 처음부터 구현하기는 상당히 고된 작업이다. 이를 하나하나 처음부터 코딩하려면 몇 주 이상이 걸릴 것이다. 그러나 다행히도 깃허브에 최신 알고리즘들이 대부분 올라와있다. 복잡한 최신 알고리즘들은 적당히 깃허브의 오픈 소스 코드를 가져다 쓰는 게 현명하다. 본인의 데이터에 맞춰 하이퍼파라미터만 조절해주면 된다. - P184
딥러닝 라이브러리는 케라스 말고도 텐서플로Tensorflow, 파이토치를 비롯하여 여러 개 있는데 케라스가 초보자가 사용하기에는 가장 편하다. 이를 활용하여 책에 나와 있는 알고리즘들만 자유자재로 구현할 줄 알아도 웬만한 대기업 데이터 분석팀에서 일하는 데는 큰 문제가 없을 것이다. - P185
정제하는 과정에서 파이썬의 경우 판다스Pandas, 넘파이 Numpy 라이브러리를 자유자재로 활용하면서 데이터를 정제해야 한다. 때에 따라서는 DB에서 데이터를 가져와야 하기에 SQL 쿼리도 알아야 하고 웹에서 크롤링이 필요한 경우 웹크롤링 기술도 익혀야 한다. 이런 연습을 하기 위해서는 프로젝트를 해보는 게 가장 이상적이다. - P186
미리 실전과 같은 환경에서 연습을 해야 한다. 주어진 데이터를 모델링하기 위한 예쁜 데이터로 정제한 후 여러 가지 딥러닝 알고리즘 후보군 중 가장 안성맞춤인 알고리즘을 여러 차례 실험해보면서 찾아야 한다. 이 과정이 꽤 시간이 많이 들기도 한다. 여러 가지 알고리즘들을 반복적으로 하나씩 적용해보고 하이퍼파라미터도 튜닝하면서 반복적으로 실험을 거듭해야 하기 때문이다. 이러한 과정을 거쳐야만 해당 데이터에 가장 이상적인 모델을 찾고 높은 정확도를 확보할 수 있다. - P187
2015년 이후 나온 딥러닝 알고리즘들은 딥러닝 기본서에서는 공부하기 어렵다. 최신 알고리즘까지는 다루지 않기 때문에 논문을 통해서 공부할 수밖에 없다. - P188
각 알고리즘을 제시한 최초 논문들은 구글 스칼라를 통해 쉽게 구할 수 있다. 논문을 읽어보고 바로 이해가 된다면 가장 이상적이다. 그렇지 않다면 논문 리뷰를 이해하기 쉽게 풀어쓴 블로그의 글들을 읽으면 된다. - P188
예를 들어 버트BERT 알고리즘은 「Bert:Pre-training of deep bidirectional transformers for language understanding」 논문에서 제시된 것으로 구글 스칼라 검색을 통해 무료로 다운받을 수 있다. 읽고 이해가 안 갈 때는 구글에 BERT라고 검색하면 티스토리, 브런치 블로그에 쉽게 정리한 글들을 발견할 수 있다. 이러한 글들은 주로 대학원생 또는 데이터분석 연구원들이 공부하기 위해서 정리도 겸해서 자신의 블로그에 쓴 글들이다. - P188
자세한 수식까지는 이해할 필요가 없다. 이해하려해도 논문에 대해서는 생략하거나 너무 복잡해서 이해하기 어려운 경우가 대부분이다. 각 알고리즘들이 이전 알고리즘들에 비해 향상된 특징들 위주로 파악하면 된다. - P188
이후에는 코딩을 해보아야 한다. 최신 딥러닝 알고리즘들은 학습 연산량이 워낙 커서 개인 PC로 처음부터 학습하기가 불가능한 경우가 많다. 버트, GPT-3와 같은 알고리즘은 학습에 쓰인 데이터가 워낙 많고 학습시간이 며칠씩 걸려서 우리가 직접 해보기는 불가능하다. 그저 논문에 쓰인 것들을 이해하고 미리 학습된 모델을 받아서 조금 튜닝해서 써야할 뿐이다. 이러한 방법을 전이학습이라 하는데 최근 딥러닝은 모두 이러한 방식을 사용하고 있다. 아무런 바탕 없이 처음부터 직접 학습하기보다는 이전에 대용량의 데이터로 미리 학습을 마친 모델을 가져다가 거기서 이어서 학습을 해서 쓰는 방식이다. - P189
전이학습을 하는 것이 속도나 정확도 측면에서 훨씬 유리하다. 미리 대용량 데이터에서 학습된 모델들은 오픈소스로 공개되어있거나 유료 API를 사용해서 받아야 하는 경우도 있다. - P189
전이학습을 한다고 해도 이어서 학습을 하거나 파인튜닝하는 과정이 필요하다. 이 과정도 코딩으로 구현해야 하는데 이것 또한 코드가 꽤 복잡하다. 책에서도 최신 딥러닝 알고리즘들 각각에 대해서 이러한 코드를 설명한 곳은 없다. 알고리즘 종류가 워낙 많고 구현할 수 있는 언어, 라이브러리도 다양하기 때문이다. - P189
파인튜닝 : 모델의 매개 변수를 매우 정확하게 조정하는 과정 - P189
다행인 점은 깃허브에 이미 누군가가 구현하여 올려놓은 경우가 많다는 것이다. 예를 들어 YOLOv3 github라고 구글에 검색하면 깃허브에 YOLOv3 코드를 올려놓은 것들을 볼 수 있다. 깃허브 리스트 중 하나를 선택해서 사용하면 된다. 물론 해당 코드를 사용하려면 데이터 정제, 하이퍼파라미터, 경로 설정 등은 직접 해주어야 한다. - P190
깃허브 코드로 예제 데이터를 돌리는데 성공했다면 실제 코드를 이해하는 단계까지 나아가야 한다. 코드를 이해해야 해당 코드를 그대로 복사 붙여넣기 하는 단계를 넘어 수정, 변형해서 사용할 수 있기 때문이다. - P190
불행한 점은 깃허브 코드에 각주까지 자세히 달아놓는 경우가 거의 없다는 것이다. 코드를 무료로 올려준 것도 감사한데 각주까지 상세히 달아달라고 하는 것은 지나친 요구일 수도 있다. 직접 한 줄씩 읽으면서 코드를 이해하는 수밖에 없다. 그래도 처음부터 직접 코드를 짜는 것보다 이미 짜놓은 코드를 이해하는 과정이 훨씬 쉽다. - P190
딥러닝 최신 알고리즘은 워낙 종류도 많고 난이도도 높아 모든 알고리즘들을 이와 같은 방식으로 공부하기가 쉽지 않다. ...(중략)... 알고리즘이 새로 나오는 속도가 워낙 빨라 다 따라잡을 수가 없다. 따라서 자신의 연구 분야에 맞는 알고리즘만 공부하는 것도 적절한 방법이다. - P190
예를 들어 딥러닝 알고리즘은 세부적으로 텍스트 마이닝, 이미지 분석 등으로 나뉠 수 있는데 예시로 버트, GPT-3는 텍스트 마이닝에 쓰이는 알고리즘이고 YOLOv3는 이미지, 영상 분석에 쓰이는 알고리즘이다. 만약 본인의 연구 분야가 이미지 분석에 맞추어져 있다면 굳이 버트BERT, GPT-3까지 깊게 공부할 필요는 없을 것이다. 버트, GPT-3의 특장점에 대해서만 블로그를 통해 익히고 코드 구현까지는 넘어가도 무방하다. - P191
단순히 보고서 또는 논문 작성용이라면 알고리즘 결과를 평가하고 해석해서 글로 적으면 된다. 하지만 이에 그치지 않고 웹 또는 앱과 같은 소프트웨어에 AI 모델을 적용하기 위해서는 추가적인 작업이 필요하다. 이 경우 서버, API에 대한 이해가 필요하다. - P192
물론 파이썬 코드로 AI 빅데이터 모델을 작성한 후 이후 서버, API 등 부수적인 작업은 다른 개발자에게 맡겨도 되긴 한다. 그러나 AI 빅데이터 모델링을 한 분석가가 직접 서버, API 작업까지 하는 게 더 유리하다. 각 모델마다 성격이 상이하므로 각 성격에 맞춰서 서버작업, API 작업을 해야 하기 때문이다. - P193
무턱대고 코드를 다른 개발자에게 전달하고 서버, API 작업을 맡긴다면 혼란스러워할 것이다. 현장에서도 AI 빅데이터 전문가가 API 작업까지 완료해서 웹 또는 앱에 바로 연동할 수 있는 형태까지를 원한다. 따라서 AI 빅데이더 모델링과 더불어 서버, API 작업까지 훌륭하게 완수한다면 소프트웨어 개발 업체들의 러브콜을 받을 수 있다. - P193
우선 AI 빅데이터 모델링은 알고리즘마다 학습부분과 출력부분으로 크게 2가지로 나뉜다. 학습부분은 AI 빅데이터 모델링을 하는 부분이고 출력부분은 모델로부터 결과를 출력하는 부분이다. 추천 서비스 알고리즘도 여러 개를 만들 수 있는데 만약 알고리즘이 총 5개 있다면 코드는 크게 알고리즘 5개 각각의 학습, 출력 코드로 나뉘어 총 10개가 된다. - P193
학습코드의 경우 주기적으로 재학습을 해주어야 한다. 실시간으로 쌓이는 데이터를 반영해 더 많은 데이터를 학습할수록 모델이 정교해지고, 최신 데이터일수록 최신 트렌드가 모델에 반영되기 때문이다. - P194
의류 쇼핑몰의 경우 계절적 속성이 트렌드에 강하게 반영되기 때문에 최근 1~3개월 정도의 데이터로 학습을 진행한다. 학습에 진행되는 변수들은 클릭 상품 장바구니에 담은 상품, 좋아요를 누른 상품, 구매한 상품, 페이지 이동 내역, 검색 이력, 리뷰 내역 등의 온라인 로그 데이터를 사용한다. - P194
시간에 따른 가중치도 적절히 주어야 한다. 만약 3개월치 데이터를 학습한다면 어제 구매한 내역이 3개월 전에 구매한 내역보다 현재의 취향을 더 반영하기 때문이다. 따라서 최근 데이터일수록 더 높은 가중치를 부여해야 한다. 이러한 학습은 주기적으로 반복되어야 한다. 이를 재학습이라고 하는데 재학습 주기는 하루에 1~3번 정도 하면 된다. - P194
재학습이 끝나고 새로운 모델이 탄생하면 이 모델을 로드하여 출력코드 부분을 완성하면 된다. 서버에서 주기적으로 학습코드가 재학습되도록 설정하고 재학습 이후 생성된 모델을 적절한 위치에 저장하도록 설정해야 한다. - P194
서버 성능에 비해 학습 연산량이 너무 많으면 부하 때문에 서버가 꺼질 수가 있다. API가 출력되는 서버가 꺼지면 실제 사용되는 어플리케이션에 문제가 가기 때문에 학습코드와 출력코드는 서로 다른 서버에 세팅해야 한다. - P194
학습코드는 오토스케일링autoscaling 또는 파게이트Fargate를 적용한 서버에 세팅해야 한다. 학습은 기본적으로 연산량이 크기 때문에 서버 스펙이 좋아야한다. 일반 EC2 서버로 만들게 되면 EC2의 스펙을 굉장히 높여야 하므로 비용이 상당히 많이 지출될 수 있다. 오토스케일링의 경우 CPU부하에 따라서 서버스펙을 유동적으로 늘렸다 줄였다하기 때문에 재학습이 진행될 때에만 서버스펙이 늘어나 비용을 줄일 수 있다. 또는 파게이트를 사용하면 초단위로 사용된 CPU 및 메모리 리소스 양에 대해서 비용이 청구되어 비용을 줄일 수 있다. - P195
클라우드 워치 CloudWatch 기능을 통해 서버가 정상적이지 않을 때에는 재부팅으로 복구하도록 설정해놓아야 한다. - P195
재학습을 통해 생성된 모델은 S3에 저장되도록 해야 한다. S3는 쉽게 말해서 온라인 스토리지 서비스이다. 데이터를 손쉽게 저장하고 다운받을 수 있다. - P195
학습코드 설정이 끝나면 출력코드도 세팅해야 한다. 출력코드가 동작하는 서버는 실제 API가 송출되는 부분이기 때문에 절대로 중간에 꺼지면 안 된다. 출력 서버는 S3에서 최신 모델을 로드해서 실시간으로 사용자의 콜에 응답한 결과를 도출해야 한다. - P195
출력은 json 또는 xml 형태로 - P195
간혹 API 요청 트래픽이 증가하면 API가 꺼지거나 심지어 서버가 꺼질 수도 있다. 쇼핑몰의 경우 명절, 휴일, 저녁시간에 트래픽이 폭증하는데, 오토스케일링 기능을 추가하여 트래픽이 폭증할 경우 서버 스펙을 자동으로 늘리게 해야 한다. 또한 서버를 이원화하여 여분으로 하나 더 만드는 방법이 있다. 한 개 서버가 꺼져도 다른 서버가 작동하여 복구되는 동안 시간을 벌 수 있다. API도 멀티프로세싱으로 돌아가게 하여 과다 트래픽에 대처할 수 있게 해야 한다. API가 잘 돌아가는지 실시간으로 감시하여 만약 API가 꺼지면 곧바로 올릴 수 있게 조치도 해야 한다. - P197
RDS(DB)에서 데이터를 받아 파게이트에서 주기적으로 재학습을 하고 학습 모델은 Simple Storage Service(S3)에 업로드 한다. API 서버는 Simple Storage Service(S3)에서 AI 모델을 다운하여 API 요청에 맞는 응답을 내보내는데 EC2를 2개 만들어 혹시 모를 서버 다운에 대비할 수 있다. Elastic Load Balancing으로 트래픽을 분산하여 주고 Route 53으로 API url 도메인 네임Domain Name을 지정해준다. - P197
서버와 API에 대해서 각각 공부를 해야 한다. 먼저 서버는 클라우드 서버라고 생각하면 된다. ...(중략)... 클라우드 서버를 서비스하는 회사는 꽤 많다. 대표적으로 아마존의 아마존 웹 서비스, 마이크로소프트의 애저Azure, 구글의 구글 클라우드 플랫폼 Google Cloud Platform, GCP가 있다. 국내에도 네이버 클라우드, KT 클라우드가 있다. 2020년 기준 아마존 웹 서비스가 전세계 클라우드 시장의 45%를 차지하고 있다. 따라서 당연히 아마존 웹 서비스를 우선적으로 공부해야 한다. 대부분의 고객사들이 아마존 웹 서비스를 사용하고 있거나 선호하기도 하고 클라우드 서버 관련 책이나 인터넷 게시글도 거의 모두 아마존 웹 서비스다. - P198
소프트웨어 사용자가 적어 트래픽이 얼마 안 되거나 아직 프로토 타입만 제작되어 트래픽이 아예 없는 경우는 사실 아마존 웹서비스 기능을 사용할 게 없다. EC2로 서버를 하나 만들고 서버 안에 필요한 프로그램들을 설치하면 끝이다. 그러나 트래픽이 폭증하게 되면 서버관리자의 역할이 중요해진다. 때에 따라서는 전담 서버관리 전문가를 고용하기도 한다. - P199
AI 빅데이터 전문가가 서버관리 전문가가 하는 일까지는 알 필요는 없다. 다만 스타트업, 중소기업에서 개발한 AI 소프트웨어가 무리 없이 초반에 잘 동작하도록 세팅해주면 된다. - P199
API는 플라스크Flask 라이브러리를 활용하면 쉽게 제작 가능하다. 플라스크로 간단한 웹 사이트도 개발할 수 있지만 우리가 거기까지 공부할 필요는 없다. 플라스크를 이용한 API 제작방법은 꽤 쉬워서 구글에 검색해 보아도 금방 따라할 수 있다. - P199
무엇보다 기억해야할 핵심은 최신 AI 학습 모델을 로드하여 예측하는 부분만 따로 떼어내 API로 제작해주어야 한다는 것이다. 또한 트래픽 폭증으로 API가 다운되지 않도록 멀티프로세싱, 캐시 작업을 해주어야하고 API가 꺼졌는지 정상 작동하는지 실시간 체크 기능도 만들어야한다. 이 부분만 잘 기억하고 실제 코드로 구현하면 훌륭한 AI 모델 API 제작이 될 것이다. - P200
|