이 글을 읽으신다면, 아래의 질문에 대답하실 수 있게 되실거에요.
- 인공지능이란 무엇인가요?
- 기계 학습이란 무엇인가요?
- 어떤 원리로 가능한가요?
이 글은 Pytorch로 시작하는 딥 러닝 입문으로 배운 내용을 인공지능에 관심을 가진 사람, 혹은 입문하려는 사람에게 쉽고 재밌게 설명하기 위한 목적으로 작성됐어요.
AI 기술의 이론적 토대를 기초부터 점차 최신 기술 순으로, 물 흐르듯 설명하는 방식으로 설명할게요.
(구현, 실습 코드는 위 E-book 링크에서 보실 수 있어요.)
인공지능(AI, Artificial Inteligence)이란, 인간의 지능(학습 능력, 추론 능력 등)을 모방한 기능을 갖춘 컴퓨터 시스템이에요.그렇다면 0과 1의 데이터를 '연산'할 뿐인 컴퓨터로
인공지능을 어떻게 구현 가능할까요?
먼저, 우리가 흔히 생각하는
코딩설명하는 짤을 준비해봤어요.
포항공대 학생들이 코딩에 대해 전과자에게 설명하기 위해,
"전과자(프로그래머)가 앞 학생(컴퓨터)에게 볶음밥을 먹게끔(코딩)"하는 과정을 설명하는 장면이에요.
출처: 전과자 70화
이처럼 컴퓨터가 지능적인 행위하려면, 프로그래머가 행동에 관한 모든 개념이나 예외 사항 등을 모두 코딩으로 구현해야 할까요?
결론은
아니에요.
인공지능은 세 가지 기술의 결합으로 구현 가능해요.
그중, 기계학습(ML, Machine Learning)을 중심으로 세가지 키워드를 설명해볼게요.
기계학습은 다양한 알고리즘으로 방대한 데이터를 분석해 미래를 예측하는 기술이에요.
즉, 인공지능은 컴퓨터가 '스스로 생각'하는 것이 아닌, '방대한 양의 데이터를 알고리즘에 따라 분석한 결과를 기반으로 예측하고, 그 결과값을 출력'하는 것에 가까워요.
이게 무슨 말인지, 차근차근 알려드릴게요.
먼저, 작은 데이터를 통해 예측하는 과정에 대해 이해해볼게요.
생각해봅시다.
어떤 학생이
1시간 공부했더니 2점,
다른 학생이 2시간 공부했더니 4점,
또 다른 학생이 3시간 공부했더니 6점을 맞았어요.
그렇다면 여러분이 4시간을 공부한다면, 몇 점을 맞을 수 있을까요?
잘하셨어요. 보통 8점을 맞을 것이라 예측 가능하겠죠.
위 예시를 '예측'하기 위해 여러분은 어떤계산 과정을 거치셨나요?
(혹시 이거 안되면 뒤로가기를 눌러주세요. 저희는 인연이 아닌거에요.)
앞의 1h -> 2점, 2h -> 4점, 3h -> 6점이라는
정보를 이용해 예측하셨을거에요.
이러한예측의 과정은 여러분의 머릿속에서 은연중에 아래와 같이 데이터를 2차원상으로 나타내고
아래처럼 좌표(x,y)를 선으로 이어 직선을 구한 뒤, x=4일 때의 선 위의 점에 해당하는 y값인 8을 예측하셨을거에요.
위의 예시에서처럼 4시간 공부했을 때 8점을 예상할 수 있지만, 아닐 수도 있겠죠. 6점을 맞거나, 10점을 맞을수도 있지 않을까요?
그렇기 때문에 그 데이터를 가장 잘 나타내는 직선을 그리는 예측의 과정을 기계 학습에서는
가설(Hypothesis)라고 해요.
가설이기 때문에 맞을 수도, 틀릴 수도 있지만 데이터의 일정한 "성향"을 잘 나타낼 수 있는 식을 구하는 거에요.
임의로 추측해서 세워볼 수도 있고, 경험적으로(데이터로) 알고 있을 수도 있어요.
위 예시에서의가설은 아래와 같은직선의 방정식이었어요.이 때 x와 곱해지는 W를
가중치(Weight)라고 하며, b를편향(bias)라고 해요.
W와 b는 직선의 방정식에서기울기와y절편에 해당해요.
직선의 방정식 알아보기(수학방)
가중치란 전체에서 가지는 중요성을 높이기 위해 특정 부분이나 요소에 일정한 수치를 더하거나 입력 값에 곱해지는 수를 뜻해요.
입력으로 들어온 데이터 중 어떤 특징을 더 많이 반영하기 위해 가중치를 더 주거나, 어떤 특징은 덜 반영할지 결정할 수 있겠죠.
편향이란 설정된 임계값을 얼마나 쉽게 넘기게 할 것인지를 결정해주는 수예요.
지금 바로 이해하실 필요 없어요.
그림 출처
이제 본격적으로 기계 학습을 이해하기 위해,
비용 함수를 설명할게요.
아래의 그림은 4개의 훈련 데이터를 2차원 그래프에 4개의 점으로 표현한 상태에요.
출처
가설을 세워예측하기 위해, 4개의 점을 가장 잘 표현하는 직선을 임의로 3개 그려볼게요.
컴퓨터에게는 '본다'라는 개념이 없으니, 주어진 데이터에 임의의 선을 그리는 상황을 가정했어요.
위 그림은 서로 다른 W(가중치)와 b(편향)의 값에 따라 그려진 3개의 직선이에요.
이 중에서 4개의 점을 가장 잘 반영하는 직선은 어떤 직선인가요?
즉, 데이터의 경향성을 가장 잘 나타내는 직선은 무엇인가요?
검은색 직선이 가장 4개의 점에 가깝게 지나가는 느낌이죠.
이를 수학적 근거로 표현하자면, 검은색 선이 데이터에 가장
오차(error)가 적다고 해요.
그림처럼 임의로 그려진
주황색 선에 대해서 실제값(4개의 좌표)과 직선의 예측 값(선 위의 x,y 좌표)의차이를 빨간색 화살표로 표현한 그림이에요.
이 직선상의 예측값들과 실제값의 차이를오차라고 하고, 그 오차의 합이 가장 적은,
즉총 오차(total error)가 가장 적은 선이 데이터를 기반으로 결과 값을 잘 예측하는 선이겠죠. 그럼 총 오차는 어떻게 구할까요?
주황색 직선의 식이
y = 13x + 1이라면, 오차는 아래의 표와 같아요.
수식적으로 단순히
오차 = 실제값 - 예측값으로 정의하면, 음수인 오차값을 더했을 때 제대로된 오차의 크기를 측정할 수 없어요.
(만약 오차값이 -100, 100, -100, 100이라면 총 오차는 0이니까요.)
그래서 이를 제곱한 뒤에 전부 더해요. 이를 수식으로 나타내면 아래와 같아요.
(수포자라도 긴장하지 마세요. 다시 쉽게 설명해드릴게요)
이를 데이터의 개수인 n으로 나눈 것이
평균 제곱 오차(MSE, Mean Squared Error)라고 해요.
결론적으로, y = 13x + 1이라는 가설에 대한 MSE값은 52.5로 총 오차를 구할 수 있어요.
좀더 쉽게 이야기하자면,
평균 제곱 오차란
1. 예측값과 실제값의 차이(오차)를
2. 양수화시키기 위해 제곱하고 모두 더한 뒤
3. 데이터의 개수인 n개로 나눈(평균) 값이에요.
정리하면 평균 제곱 오차를 W와 b에 의한 비용 함수로 재정의했을 때
와 같아요.
위 Cost(W, b)가 최소가 되는 W와 b를 구하면 훈련 데이터를 가장 잘 자나태는 직선을 구할 수 있어요.
쉽게 말하자면, 데이터(정보)를 가장 잘 나타내는(예측하는) 직선(가설)을 세울 수 있답니다.
참고로,
비용함수(Cost Function) =손실 함수(loss Function) =오차 함수(error func) =목적 함수(Objective F)
모두 같은 개념의 다른 표현이에요.
이제
비용 함수의 값을 최소로 하는 W와 b를 찾는 방법을 알아볼게요.
이때 사용되는 것이옵티마이저(Optimizer) 알고리즘이며,최적화 알고리즘이라고 불러요.
그리고 옵티마이저를 통해 가장 적절한 W와 b를 찾아내는 과정을 머신 러닝에서학습(training)이라고 불러요.
가장 기본적인 옵티마이저 알고리즘인
경사 하강법(Gradient Descent)에 대해 알아볼까요?
편향 b는 고려하지 않고, y = Wx와 같은 식으로 설명해볼게요.
계속 수학적 얘기만 계속해서 읽기 지루하고, 재미없을 수 있어요. 그렇지만 다 왔습니다. 곧 컴퓨터가 어떻게 인공지능을 가질 수 있는지 알 수 있어요. 혹시 포기하실거면 옆에 하트는 눌러주고 가주세요 ^^;
위 그림은 주황색선의 기울기(W)가 20일 때, 초록색선은 기울기 W가 1일 때의 그림이에요.
즉, y = 20x, y = 1x에 해당하는 직선들이죠.
앞서 봤던 y = 13x + 1의 직선보다 실제값과 오차값의 차이(오차)가 확연히 커요.
즉, 기울기(W)가 지나치게 커도 오차가 커지고, 기울기가 지나치게 작아도 오차가 커져요. (편향인 b도 마찬가지에요.)
편의를 위해 편향 b를 제외한 가중치 W만을 사용한 Hypo(x) = Wx라는 가설로,
경사 하강법을 이해해볼게요. (숨 참으세요. 마지막 이론입니다.)
비용 함수의 값을 cost로 표현하고, W(기울기)와의 관계를 그래프로 표현해볼게요.
기울기 W가 무한대로 커지면 cost의 값 또한 무한대로 커지고, 반대로 W가 작아져도 cost 값은 무한대로 커져요. 주황색 선에서 W가 20일 때와 W가 1일 때 오차값이 컸던 것 처럼요.
위 그래프에서 cost가 가장 작을 때는 맨 아래의 볼록한 부분이에요.
기계(컴퓨터)는 학습을 통해 위처럼 cost가 가장 최소값을 가지게하는 W(=13)를 찾아야해요. 비용 함수의 값이 가장 작은 곳이 총 오차가 가장 적은 곳이니까요.
기계(컴퓨터)는 임의의 초기값 W를 정하고, 맨 아래의 볼록한 부분을 향해 점차 W의 값을 수정해요.
이를 가능하게 하는 것이경사 하강법(gradient Descent)이고, 고등학교 수학 과정인 미분을 통해 이해할 수 있어요.
(쉽게 설명해볼게요. 그래도 포기할거면 좋아요는 누르고 가..)
한 점에서의 순간 변화율 또는 접선에서의 기울기인
미분을 통해 찾아볼게요.
맨 아래의 볼록한 부분으로 갈수록 접선의 기울기가 점차 작아진다는 점을 이용하면, 접선의 기울기가 0인 지점(수평)이 최적의 W 값임을 알 수 있어요.
즉, cost가 최소화되는 지점은 접선의 기울기가 0이 되는 지점이며, 미분 값이 0이 되는 지점이에요.
비용 함수가 최소화라는 것 ->
평균 제곱 오차가 가장 작다는 것 ->
데이터의 성향을 가장 잘 나타내는 직선(가설)을 찾았다
한마디로 데이터를 잘 예측하는 가설을 세우게 된거죠.
이 방법은 현재 W에 접선의 기울기(gradient)를 구해 특정 숫자
a(alpha)를 곱한 값을 빼서 새로운 W로 사용하는 식으로 가능해요.
예를 들어볼게요.기울기(gradient)가 음수(-)일 때 -> W의 값 증가.
특정 숫자 a를 기울기에 곱한 값을 W(-)에서 뺀(-) 값은 증가(+)하므로 결과적으로 접선의 기울기가 0인 방향으로 W의 값이 조정돼요.
(음수인 W에 양수가 더해지니까요.)
기울기가 양수일 때 -> W 값 감소
기울기가 양수일 때도, W의 값에 a를 곱한 기울기가 빠지니 줄어들어 0으로 수렴할 수 있죠.
즉, 아래의 수식은 접선의 기울기가 음수거나, 양수일 때 모두 접선의 기울기가 0인 방향으로 W의 값을 조정해요.
여기서 a인 alpha를
학습률(learning rate)라고 불러요. W의 값을 변경할 때, 얼마나 크게 변경할지를 결정하는 값이죠.
그러나 주의하셔야해요. 학습률 a가 지나치게 높은 값을 가질 때, 접선의 기울기가 0이 되는 W를 찾아가는 것이 아니라, cost의 값이 발산할 수 있어요.
(기울기가 음수인 경우 -> a * gradiient 값이 지나치게 크다면, 학습을 거듭하면서 찾으려는 미분값이 0인 값을 지나쳐 한없이 커질 수 있겠죠.)
적당한 학습률을 적용하는 것이 중요해요.
지금까지,
편향(bias)를 배제하고 최적의W(weight)을 찾는 방법을 이해했어요. 실제 경사 하강법에서는 최적의 W와 b의 값을 찾아야 해요.
그리고 가설, 비용 함수, 옵티마이저는 머신 러닝 분야에서 사용되는 포괄적 개념이에요. 선형 회귀에 가장 적합한 비용 함수는
MSE이고, 옵티마이저 알고리즘은gradient에요.
적절한 W와 b의 값을 찾아, 데이터에 가장 잘 맞는 가설을 세웠다면, 테스트 데이터셋을 통해 가설을
검증(validation)하고 테스트를 통해평가해요.
지금은 쉬운 예였기 때문에 나눌게 없지만 데이터셋의 크기가 무수히 크다면, 70%의 데이터로 학습시키고, 20%로 검증하고 10%로 테스트하는 식이죠.
쉽게 얘기하자면, 70%로 학습시킨 모델의 예측값(W,b)을 찾고, 20%로 학습률, 뉴런의 수, 드롭아웃 비율 등을 조정해요.(후에 소개할게요)
나머지 10%의 데이터로 만든 모델이 정확히 예측하는지를 테스트해볼 수 있어요.
여기서 용어 정리.
훈련 데이터셋이란 예측을 위해 사용한 데이터를 뜻해요.
테스트 데이터셋이란 학습이 끝난 모델이 얼마나 잘 작동하는지 판별하는 데이터셋을 뜻해요.
그래서
선형 회귀 이론이란, 학습 데이터와 가장 잘맞는 하나의 직선을 찾는 일이라고 정의할 수 있어요. 단어가 어렵죠?
회귀란 둘(x,y) 또는 그 이상의 변수들(x,y,z..) 간의 의존관계를 파악해서, 특정한 변수의 값(y)을 다른 한 개(x) 또는 그 이상의 변수들로 설명하고 예측하는 통계의 분석 방법이에요. 기계학습에서는 연속된 값을 결과로 가지는 문제를 회귀(Regression) 문제라고도 해요. (반댓말은 분류(Classification) 문제라고 해요)
선형이란 방법이 직선 혹은 고차원의 선이라는 뜻이죠.
화산귀환이나 웹툰에서의 회귀를 기대하셨다면 개추..
그래서, 인공지능이란 무엇인가요?
-> 데이터를 알고리즘으로 분석해 결과값을 예측하는 것입니다.
기계 학습이란 무엇인가요?
-> 데이터를 기반으로 가설을 세워 데이터에 가장 맞는 가중치와 편향 값을 찾아내는 과정입니다.
어떤 원리로 가능한가요?
1. 데이터셋에 가설을 세워요.
2. 가설과 실제 데이터간의 오차를 구해요.
3. 옵티마이저 알고리즘을 통해 학습률을 적용해서 비용함수가 되는 적절한 W와 b를 찾을 때까지 반복하며 조정해요.
4. 테스트셋을 통해 학습을 통해 조정한 가설을 확인해요.
기계 학습의 아주 기초적인 부분을 다뤄봤어요. 이 다음으로 다중 선형 회귀와 벡터와 행렬 연산의 개념을 통해, GPT와 같은 생성형 인공지능의 원리까지 한걸음 더 나아간 설명을 하고싶기도 해요.
아니면 Pytorch로 실제 기계학습 시키는 코드 위주로 설명할 수도 있는데 현재 고민중입니다.
긴 글 읽어주셔서 감사합니다. 좋은 하루 되세요.