즉, 인공지능이란 문제 해결을 위해 인간의 지능을 모방한 기계를 구현하는 분야라 할 수 있다.
머신러닝
그렇다면 머신러닝이란?
말 그대로 Machine Learning, 기계 학습이다!
머신러닝은 인공지능의 한 종류이기 때문에 두 정의를 섞어보자면 이렇게 정의할 수도 있다.
인간의 지능적 기능 중 하나인 학습을 모방하여 기계로 구현하는 것
딥러닝
그렇다면 딥러닝이란?
심층 신경망이라는 놈을 기반으로 머신러닝을 하는 분야인데, 아직은 이렇구나만 하면 된다.
머신러닝
이제 본격적으로 머신러닝에 대해 알아본다.
머신러닝은 아래와 같은 분야에 활용되고 있다.
문서 분류/인식
스팸 이메일 필터링
필기체 문자인식
주식시장 예측 (❁´◡`❁)
얼굴, 생체 인식
이러한 분야를 보면 하나의 공통점이 있다.
문제 해결을 위한 지식 표현이나 명시적으로 처리 과정을 알기 힘들다는 점이다.
위와 같은 문제들을 알고리즘 문제 풀듯이 코드를 작성할 수 있을까?
사실 코드 작성이야 정말 어떻게 어떻게든 할 수야 있겠지만, 수 많은 데이터를 고려하기 힘들 것이다.
필기체 문자 인식만 봐도 수 많은 필기체들이 있는데 이 많은 필기체들의 규칙을 우리가 찾아서 코드로 작성하기 힘들 것이다.
그래서 기계가 대신하여 수 많은 데이터를 보고 규칙을 찾아 문제 해결하는 것을 머신러닝이라고 한다!
여기서 나는 의문이 들었다
"아니 내가 코드를 작성하지 않아도 스스로 규칙을 찾고 스스로 문제 해결 한다고? 처음부터 사람이 필요 없는거 아닌??가??"
그렇게 더 알아보니 사실 스스로 규칙을 만들어내는 것처럼 보이지만,
실제로는 사람이 설계한 함수 안에서 파라미터의 값을 조정하는 과정일 뿐이였다.
컴퓨터가 데이터를 처리하기 위해서는 해당 영역에 대한 지식이나 처리 규칙이 필요하다.
(이러한 처리 규칙이 밑에서 등장하는 특징 추출이다.)
이러한 데이터 처리를 위한 내용이나 방법을 하드코딩으로 일일히 작성하긴 해야한다.
그래서 내가 생각하는 머신러닝은 이러하다.
정해진 함수 안에서 파라미터(값)을 최적화 하는 것
우리가 함수를 작성하면, 데이터만큼 루프를 돌면서 함수 내부의 세부 값을 조정하여, 최적의 문제 해결을 위한 함수를 완성 시킨다는 뜻이다.
머신러닝의 처리 과정
처리과정은 두 가지 단계로 나뉜다.
학습 단계 데이터에 대한 분석을 통해 결정함수에서 최적의 파라미터를 찾는 과정
대략적인 과정은 위와 같으며, 여기서 결정 함수(매핑 함수)란 입력과 출력의 관계를 연결(매핑)해주는 함수다.
추론 단계 학습 단계에서 만들어진 최적화 된 결정 함수를 이용하여 결과 값을 얻는 과정
실전으로 문제 해결을 하는 단계다!
전처리와 특징 추출
학습과 추론 단계의 공통적인 부분에 대해 알아본다.
전처리
특징 추출 머신러닝에서는 데이터를 모두 벡터 형태로 다루기 때문에, 데이터를 모두 벡터 형태의 최종 데이터를 만드는 단계다. 전처리를 통해 정제된 데이터에서 가장 핵심이 되는 정보만을 특징으로 찾는다.
이렇게 과일의 데이터를 특징 추출 시키면 이런 느낌이다.
데이터
색상
둥근 정도
질감
사과
0.9
0.9
0.2
키위
0.4
0.6
0.8
머신러닝의 기본 요소
데이터와 데이터 분포
머신러닝에서는 전체 데이터 집합이 이루는 분포 특성을 고려하여 특징을 추출하고 학습을 진행한다.
그렇기 때문에 해당 개념에 대해 알아본다.
실생활에서 다루게 되는 데이터는 매우 다양하다.
이러한 데이터를 컴퓨터에서 다루어지기 위해서는 어떤한 수치로 표현되어야 하는데, 일반적으로 표현하는 방법은 바로 벡터다.
그래서 보통 머신러닝 내부에서는 벡터 연산을 기반으로 알고리즘이 수행된다.
예를들어 하나의 사진에서 데이터를 추출한다고 하면, 아래와 같이 픽셀개수만큼 벡터 데이터를 뽑아낼수 있겠다.
데이터
Red
Blue
Green
Result vector
1번째 픽셀
23
4
18
(23, 4, 18)
2번째 픽셀
7
176
221
(7, 176, 221)
알다시피 n차원 벡터는 n차원 공간상의 한 점으로 나타낼 수 있는데,
이 공간상에서 점(데이터)들이 어떤 형태로 퍼져있는지에 대한 모양이 바로 분포 특성이다.
2차원 데이터 집합의 산점도
이렇게 머신러닝에서 시각적으로 데이터 분포 형태를 확인할 수 있는 데이터를 사용하는 것은 중요한 몇 가지 이유가 있다.
통계적 수치의 함정 다수의 데이터셋 통계량(평균, 분산, ...)이 동일하더라도 각 데이터셋마다의 분포 형태는 다를 수 있다. 이 데이터들의 관계가 직선일 수도 있고, 곡선일 수도 있는 것 처럼 다양한 관계를 가질 수 있어 단순한 수치만 보고 모델을 설계하면 중요한 패턴을 놓칠 수 있다.
노이즈 식별, 편향성 파악 예상 범위를 크게 벗어난 이상한 데이터를 식별 가능하며, 데이터가 치우쳐 있는지 확인이 가능하다.
특징 추출의 근거 여러 변수 간의 관계를 시각화하면 어떤 변수가 문제 해결시 결정적인 역할을 하는지 감을 잡을 수 있다. 이는 이후 특징 추출시 중요한 근거가 된다.
추가로 알아두어야 할 것은, 항상 테스트 데이터에만 의존하면 안된다는 점이다.
머신러닝에서는 전체 데이터 집합을 모집단(Population) 이라고 부른다. 또한 모집단에서 데이터를 일부 추출한 것을 표본(Sample) 이라고 부른다.
실제 학습과 평가는 이 모집단에서 일부를 추출한 훈련 데이터와 테스트 데이터(Sample) 를 사용해 이루어진다.
따라서 테스트 데이터의 성능만으로 모델의 일반 성능을 완전히 판단하는 데에는 한계가 있어 항상 모집단의 분포를 함께 고려해 주어야 한다.
모집단과 4개의 표본 집합
전처리와 특징추출
전처리와 특징 추출은 모두 데이터를 가공 하는 과정이여서 처음에 많이 헷갈렸다.
내가 이해하기로는 두 개념의 차이는 의미가 바뀌는가에 차이가 있는 것 같다.
전처리
입력 데이터에 대해 중복같은 불필요한 데이터를 제거하고, 문제에 따른 분석에 용이한 형태로 데이터를 가공하는 단계다.
데이터를 가공할 때, 다음과 같은 조건을 만족해야한다. 데이터의 의미가 이전과 같아야하며, 단위/범위의 형태만 달라진다.
즉, 같은 데이터를 더 깔끔하게 만드는 과정이다.
이미지 크기 통일 : 모든 이미지를 256×256 크기로 조정
밝기/명암 보정 : 카메라 조명 차이를 줄임
노이즈 제거 : 흐릿하거나 먼지가 낀 이미지 개선
이런 과정들은 모델이 데이터를 더 안정적으로 학습하도록 도와주지만, 데이터가 무엇을 의미하지는지는 바뀌지 않는다.
특징 추출
주어진 데이터를 그대로 사용할 경우에는 계산 비용과 메모리 비용이 굉장히 증가하게 된다.
그래서 이런 문제를 해결하기 위해 핵심 데이터만 추출하는 과정이 중요한데, 해당 과정을 특징 추출이라고 한다.
특징 추출을 처음 접했을 때는, 사진에서 색상 값을 추출한 표와 같이 어떠한 값을 추출해 내는 것만을 생각했었다.
그러나 여기서 한 단계 더 나아가 2차 재표현도 특징 추출에 속한다!
이미 추출한 값들을 다시 가공하여 재표현하는 과정 역시 특징 추출에 포함되는데,
예를들어 히스토그램, 방향 특징, 전이 확률 분포 이러한 숫자 벡터나 유의미한 정보로 바꾸는 모든 과정을 넓은 의미에서 특징 추출이라고 부른다.
이렇게 놓고 봤을 때, 전처리는 데이터를 보존하려고 하는 편이고, 특징 추출은 중요하지 않은 데이터는 버리는 과정으로도 볼 수 있겠다!╰(*°▽°*)╯
용어 정리
인공지능 : 인간의 지능을 모방한 시스템을 구현하는 분야
머신러닝 : 인공지능의 한 분야로, 인간의 지능중 학습 능력을 모방한 시스템을 구현하는 분야
딥러닝 : 머신러닝의 기법중 하나로, 심층 신경망을 사용하여 학습하는 방법
결정함수 : 입력 데이터를 받아 출력 값을 결정해주는 함수 (그냥 진짜 함수임;)
학습단계 : 데이터를 분석하여 결정함수의 최적의 파라미터를 찾는 과정
추론단계 : 학습단계에서 얻은 최적화된 결정 함수를 사용해 실제 입력에 대한 결과를 예측하는 단계 (실사용 단계)
데이터 분포 : 벡터 공간에서 데이터들이 어떤 형태로 퍼져 있는지에 대한 특성
전처리 : 입력 데이터를 의미가 바뀌지 않는 선에서, 학습이 가능한 상태로 깔끔하게 가공하는 과정
특징 추출 : 전처리된 데이터에서 수치를 추출하거나, 데이터를 새롭게 유의미한 정보로 바꾸는 과정