관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

딥러닝 비전 1 - 방법론의 대전환과 기계학습 기초 본문

인공지능/컴퓨터 비전

딥러닝 비전 1 - 방법론의 대전환과 기계학습 기초

huenuri 2024. 11. 12. 19:20

이제 드디어 딥러닝 컴퓨터 비전 학습에 들어가 본다. 딥러닝에 대해서는 다른 여러 권의 책과 강의를 통해 어느 정도 공부했지만 아직 완전히 이해한 것이 아니니 이 공부가 많은 도움이 될 것 같다. 그리고 이 책은 다른 어떤 책 보다 깊이 있게 설명하고 있어 처음 들을 때는 어렵지만 개념을 잡는데 좋은 책이라고 생각한다.

 

시작하기 전에

컴퓨터 비전은 꾸준히 발전을 거듭하였고 다양한 분야에서 실용적인 시스템을 만드는데 성공하였다. 6장에서는 성공적인 알고리즘을 중심으로 비전 에이전트를 직접 제작하는 값진 경험을 했다. 이런 발전에도 불구하고 여전히 해결하지 못한 어려운 문제가 아주 많다.

 

아래 그림은 두 가지 대표적인 문제다. 그림 7-1 a는 의미 분할 문제로 물체를 구성하는 화소를 모아 영역으로 분할하고 물체 부류를 알아내야 한다. 그림 7-1 b는 영상 설명하기 문제인데 영상의 핵심 내용을 파악한 뒤 10개 가량의 단어로 이루어진 설명 문장을 생성해야 한다. 이런 고난도 문제에서 고전적 컴퓨터 비전은 제한된 상황에서조차 턱없이 낮은 성능에 머문다.

 

 

 

컴퓨터 비전은 딥러닝을 도입하기 전의 고전적 컴퓨터 비전과  딥러닝을 도입한 현대적 컴퓨터 비전으로 구별할 수 있다. 딥러닝은 고난도 문제를 해결할 수 있는 길을 열어 준다.


 

 

 

 

1. 방법론의 대전환

6장까지 공부한 내용 대부분은 고전적 컴퓨터 비전에 해달한다. 이때 사용한 방법을 한 마디로 요약하면 '규칙 기반'이다. 현대적 컴퓨터 비전은 '데이터 중심'인 딥러닝으로 대전환한다. 딥러닝은 월등한 성능을 보장하며 많은 장점이 있다.

그렇다고 딥러닝이 모든 면에서 고전적 컴퓨터 비전을 능가하는 것은 아니다. 고전적 컴퓨터 비전과 현대적 컴퓨터 비전은 상호 보완 관계다. 둘 다 이해하고 잘 다룰 수 있어야 컴퓨터 비전의 전문성을 완성할 수 있다.

 

 

규칙 기반의 한계

지금까지 공부한 알고리즘에 대해 생각해보자. 교통약자 보호 표지판을 인식하는 비전 에이전트는 영상에서 SIFT 특징을 추출하고 빠른 매칭을 위해 kd 트리를 사용한다. 이 알고리즘은 모두 사람의 합리적 사고를 통해 개발되었다. 사람은 데이터를 면밀히 관찰하여 정교하게 알고리즘을 개발하고 꾸준히 개선한다. 사람이 만든 이런 특징과 매칭 알고리즘을 수작업 특징과 수작업 알고리즘이라고 한다.

 

수작업으로 개발한 결과는 대부분 규칙으로 표현한다. 사람이 규칙을 도출할 때는 다양한 영상을 면멸히 살펴도 한계가 있다. 규칙 기반을 사용하는 고전적 컴퓨터 비전은 사람의 노력으로 일정 수준의 성능은 달성하지만 그 이상을 돌파하지 못하는 결정적인 한계가 있다.


 

 

 

딥러닝으로의 대전환

아래 그림은 컴퓨터 비전 방법론의 얼개를 보여준다. 컴퓨터 비전 방법론은 크게 규칙 기반과 기계학습으로 나눌 수 있다. 기계학습은 주어진 문제 도메인에서 데이터를 수집하고 모델을 학습하는 과정을 거쳐 문제를 해결한다. 기계학습 방법론에는 다양한 학습 모델이 있는데, 크게 신경망 모델과 신경망이 아닌 모델로 구분할 수 있다. 

신경망에서는 대략 2010년 이전에는 얕은 신경망 모델을 사용했는데 이후에는 훨씬 많은 층을 배치한 깊은 신경망 모델로 발전한다. 깊은 신경망 구조를 설계하고 학습하고 예측에 사용하는 기술을 통틀어 딥러닝이라고 한다. 딥러닝은 뛰어난 성능으로 인해 다른 기계학습 모델을 제치고 컴퓨터 비전의 주류 기수로 자리 잡았다.

 

 

 

신경망은 얕은 모델로 출발하여 점점 깊어지며 발전해 왔다. 이 장에서는 이런 과정에 따라 얕은 신경망인 퍼셉트론에서 시작해 다층 퍼셉트론과 깊은 다층 퍼셉트론 순으로 설명한다. 퍼셉트론은 단순하여 기본 개념과 연산을 이해하기 쉬울 뿐 아니라 여전히 딥러닝 모델의 주요 부품으로 활용되기 때문이다.

딥러닝의 영향력은 컴퓨터 비전을 넘어 아주 넓다. 자연어 처리는 영어나 한국어와 같은 자연어를 처리하여 언어 번역이나 챗봇 등을 만드는 기술이다. 딥러닝은 자연어 처리에서도 주류 기술로 활용된다.


 

 

 

 

2. 기계학습 기초

딥러닝은 기계학습의 일종이고 기계학습의 오래된 이론에 뿌리를 두고 있기 때문에 기계학습의 기초를 먼저 설명한다.

 

기계학습의 단순한 예

이 절에서는 보일러라는 단순한 예시를 가지고 기계학습의 개념과 용어를 설명한다. 기름을 더 분사하면 보일러 온도는 상승한다. 보일러 공학자는 기름 분사량을 x, 온도를 y로 두었을 때 x와 y의 관계를 표현하는 함수에 관심을 가진다. 함수가 있으면 분사량을 특정 값으로 설정했을 때 온도를 알 수 있기 때문이다.

 

기계학습에서는 함수모델이라 부르고, 수집한 데이터로 방정식을 풀어 함수를 알아내는 일학습이라고 한다. 식 (7.1)은 기계학습 모델을 함수 형태로 표현한다. 학습된 모델로 특정 분사량에 대해 온도를 계산하는 일을 예측이라고 한다.

 


 

 

 

기계학습의 4단계

기계학습은 다음의 4단계를 거친다. 각 단계를 좀 더 상세하게 살펴본다.

 

 

 

 

1단계 : 데이터 수집

 

참값 y는 모델이 맞혀야 하는 정답에 해당한다. 예시 7-1의 경우 y는 연속된 값이다. 이런 문제를 회귀라고 한다. 그림 7-5 a처럼 입력 영상에서 물체 부류를 알아내는 문제에서 y는 이산값이다. 이런 문제를 분류라고 한다 컴퓨터 비전에는 분류 문제뿐 아니라 검출, 분할, 추적 등의 다양한 문제가 있는데, 이런 문제에서는 참값을 표현하는 일이 훨씬 복잡하다.

예를 들어 검출은 그림 7-5 b에서 보는 바와 같이 물체 위치를 직사각형으로 알아내야 하므로 직사각형 두 점의 좌표가 y에 해당한다.

 

 

 

 

분할의 경우 물체가 차지한 영역을 화소 수준으로 지정해야 하기 때문에 노동 집약적이다. 다양히 아주 많은 데이터가 이미 인터넷에 공개되어 있다. 이 책에서는 공개 데이터셋으로 프로그래밍한다.


 

 

 

2단계 : 모델 선택


 

 

 

3단계 : 학습

학습은 훈련 집합에 있는 샘플을 최소 오류로 맞히는 최적의 가 중치 값을 알아내는 작업이다. 예시 7-1에서는 모델 함수에 데이터셋을 대입하여 만든 방정식을 풀어 가중치의 최적값을 구했다. 이런 방식을 분석적 방법이라 한다. 실제 데이터에서는 아래 그림에서 보여주는 바와 같이 잡음이 발생하고 2단계에서 선택한 모델이 데이터 분포와 정확히 맞지 않는 등의 여러 요인으로 인해 어느 정도의 오류가 필연적이다. 기계학습은 오류를 조금씩 줄이는 과정을 반복하는 수치적 방법을 사용한다.

 

 

 

학습 알고리즘이 최적의 가중치를 찾으려면 현재 가중치 값 W가 얼마나 좋은지, 즉 오류를 얼마나 덜 범하는지 측정하는 함수가 필요하다. 기계학습에서는 이 함수를 손실 함수라고 부른다. 식 (7.4)는 평균제곱오차를 정의한다. 이 손실 함수는 0에 가까운수록 좋다.


 

 

 

4단계 : 예측

예측이란 학습을 마치 모델, 즉  W^을 가진 모델에 학습을 사용하지 않던 새로운 특징 벡터를 입력하고 출력을 구하는 과정이다. 예측을 추론이라고 부르기도 하며 예측을 통해 모델의 성능을 평가할 수 있다. 모델의 객관적인 성능 평가는 모델을 개선할 때나 모델을 현장에 설치해도 되는지 판단할 때 중요하다. 가장 좋은 평가 방법은 바로 현장에 설치하여 정확률을 측정하는 것인데, 이 방법은 비용이 많이 든다.

특히 의료나 자율주행처럼 생명과 직결된 상황에서는 불가능한 방법이다. 기계학습은 데이터셋을 일정 비율로 분할하여 일부는 훈련 집합에 넣어 학습하고 나머지는 테스트 집합에 넣어 예측에 사용한다.

 

데이터셋을 훈련 집합과 테스트 집합으로 분할하여 성능을 측정하면 어느 정도 객관성을 보장할 수 있지만 데이터셋의 크기가 충분히 크지 않은 상황에서는 우연히 좋은 또는 우연히 나쁜 성능이 발생할 수 있다.

 

위의 그림은 데이터셋을 k개 부분 집합으로 분할하고 성능 실험을 k번 하여 평균을 취하는 k-겹 교차 검증을 설명한다. i= 1, 2, ..., k로 바꾸면서 실험하는데 i번째 실험에서는 i번 부분 집합을 테스트 집합으로 사용하고 나머지 k-1개 부분 집합을 훈련 집합으로 사용한다.


 

 

학습을 마치고

딥러닝에 대한 기본 학습을 진행해 보았다. 모두 다 여러 번 들어본 내용이지만 이렇게 한번 정리해 보니 뭔가 틀이 잡히는 느낌이 들었다. 이 단원은 실습보다는 개념 학습이 더 많은 것 같다. 분량도 다른 단원에 비해 월등히 많지만 그래도 빠짐없이 하나씩 배워간다는 생각으로 공부해 볼 것이다.

 

이제 시간이 많이 되어 식사 준비를 하고 저녁을 먹어야겠다. 요즘은 인스턴트 음식을 가능하면 먹지 않으려고 1주일에 딱 두 번만 외식을 허용하고 나머지는 집밥을 먹으려고 하는 편이다. 오늘 메뉴는 청국장이다. 이맘때면 꼭 생각하는 내가 가장 좋아하는 음식 중에 하나이다.