Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags more
Archives
Today
Total
관리 메뉴

러닝머신 하는 K-공대생

회피했던 머신러닝 이론들 & 최근 드는 생각 본문

Machine Learning

회피했던 머신러닝 이론들 & 최근 드는 생각

prgmti1 2022. 1. 24. 18:01

0. 글을 시작하며

  전에는 딥러닝 쪽 공부와 영상처리 및 XAI 분야의 공부를 위주로 진행했었는데 고전적인 머신러닝 쪽 부분은 선형대수학, 가우시안 등 수학적인 내용이 많아 넘어갔었다. '머신러닝 도감'이란 책을 읽게 되었는데 수학적인 내용을 최소화하여 그림과 sklearn 라이브러리의 예제를 통해 쉽게 알려주어 전체적인 흐름을 잡기에 좋았다. 머신러닝 기초, 지도학습, 비지도학습 파트로 나뉘는데 지도학습 부분은 대부분 알고 있었고 비지도 학습 부분은 PCA, 잠재 의미 분석, 국소 선형 임베딩 등 이름만 들어본 경우가 많았다. 그래서 잘 몰랐던 내용들을 위주로 정리해보려고 한다. 그리고 최근에 머신러닝 공부를 하면서 도움을 받은 사이트, 유튜브들도 정리해둘 테니 한 번 확인해보길 바란다. 또한 방학이니 오랫만에 잡담도 털어야지...

1. 정규화 선형회귀 모형

손실 함수에 페널티항을 추가해 모델을 단순화하고 어떤 데이터를 사용해도 비슷한 학습 결과를 사용해도 비슷한 결과를 얻도록 일반화할 수 있다. 능형 회귀(ridge regression)와 LASSO 회귀가 대표적이고 각각 가중치 제곱합을 최소화 제약조건(L2 규제), 가중치의 절댓값 합(L1 규제)을 최소하 한다는 제약조건이 추가된다. 능형 회귀와 LASSO 회귀는 페널티항이 추가되면서 학습 파라미터의 증가폭이 작아진다는 점은 같지만, LASSO 회귀에서는 특정 학습 파라미터가 0이 되기 쉽다는 특징이 있어 LASSO 회귀 기반의 특징을 선택하면 모델을 일반화하거나 해석하기 쉽다.

2. 커널 기법을 적용한 서포트 벡터 머신(SVM)

SVM은 집단 사이의 margin을 최대화한다는 기준으로 데이터에서 가능한 먼 결정 경계를 학습하는 분류 및 회귀에 사용되는 알고리즘이다. 이때 결정 경계는 직선 형태이므로 곡선 형태의 선형 결정 경계를 학습할 수 없다. 이때 데이터를 다른 특징 공간에 옮긴 후 선형회귀하는 커널 기법을 이용해 복잡한 결정 경계를 학습할 수 있다. 커널 기법은 특징의 분석보다 정확도를 요구할 때 사용하는 것이 좋고, 무조건 커널 기법을 적용해 비선형 커널 함수를 이용하지 말고, 선형 커널을 이용한 분석 등으로 데이터 분포를 확인해 커널 함수를 이용한 학습을 수행하자.

3. 랜덤 포레스트

결정 트리 모델을 여러개 사용해 결정 트리 하나를 사용하는 것보다 예측 정확도를 높이는 것이며 분류 및 회귀 문제 모두에 사용 가능하다. 결정 트리는 영역 하나와 모든 특징과 나눌 대상의 불순도를 계산하고 불순도가 가장 작아지도록 영역을 나누고 각각의 영역에서 이를 반복하여 얻어낼 수 있다. 머신러닝은 기본적으로 학습 데이터가 같으면 학습 결과도 비슷하기에 데이터를 무작위 복원 추출을 실행해 학습 데이터를 늘리는 부트스트랩, 부트스트랩으로 만든 학습 데이터로 결정 트리를 학습시킬 때 일부 특징만을 임의 선택하는 방식으로 가급적 분류 결과가 다르도록 학습시킨다. 또한 특징별 중요도를 얻을 수 있다.

4. 차원 축소

차원 축소는 데이터로부터 유의미한 feature를 추출하거나 머신러닝 모델의 효율을 위해 중요하다. 주성분 분석(PCA), 잠재 의미 분석(LSA), 음수 미포함 행렬 분해(NMF), t-SNE(t-분포 확률적 임베딩) 등의 방식으로 데이터의 차원을 축소시킬 수 있다

 

- PCA(주성분 분석): 데이터를 사영시켰을 때 가장 높은 분산 값을 갖는 축을 찾아서 그 축으로 차원을 축소하는 것이고 이 축을 주성분이라고 함. 사영 시 높은 분산을 갖는 것은 원래 데이터의 분포를 잘 설명할 수 있다는 것이다. 이 축은 입력 데이터의 공분산 행렬을 고유값 분해했을 때 구해진 고유 벡터가 PCA의 주성분 벡터가 되어 이를 이용해 입력 데이터를 선형 변환하는 방식이 PCA이다.

 

- LSA(잠재 의미 분석): 잠재 의미 분석을 활용하면 많은 양의 문서 데이터에서 단어에 있는 잠재 관련성을 알 수 있다. 단어 공간을 잠재 의미 공간으로 변환할 때 행렬을 특정한 구조의 다른 행렬 곱으로 나타내는 행렬 분해를 이용한다. 행렬 X = UDV^T의 곱으로 나타내고 대각 행렬 D에서 대각 요소값에서 중요도가 큰 요소들을 선택해 새 대각 행렬 D’을 만들고 이에 대응되게 U, V도 수정해 U’, V’를 얻어 특징 r개의 차원을 축소할 때 U’D를 곱해 잠재 의미 공간으로 나타낼 수 있다. 정확히 명시하는 뜻이 없는 잠재 변수들에 따른 특징으로 나누는 것으로 각각의 관련성을 파악할 수 있다. 이런 특이값 분해를 통해 문서를 잠재공간에 대응시켜 정보 검색에 유용하게 활용할 수 있으나 변환된 행렬로 단어의 관련성을 제대로 설명하기 어렵다는 점(행렬 요소가 음수 값, 차원 각각이 직교 등), 계산 시간이 오래걸린다는 점(행렬 차원수가 단어 수이므로), 모델 갱신이 어렵다는 점을 기억하자. 

 

- NMF(음수 미포함 행렬 분해): 원본 행렬의 성분이 모두 양수이며 행렬 분해 후 행렬 요소가 양수고, 잠재 의미 공간의 차원 각각이 직교한다는 제약이 없다는 특성이 있다. 잠재 변수가 음수가 아니므로 분석 결과를 설명하기 쉽고 잠재 변수가 직교한다는 제약이 없어 어느 정도 중복 정보가 있어 실제 데이터를 반영한 모델을 만들 수 있다. nxd 의 원본 데이터 행렬을 V라 할 때, nxr의 W, rxd의 H의 곱으로 WH의 근사 행렬을 만든다. 이과정은 W, H를 양수 값으로 초기화해 H를 상수로 두고 W를 갱신, W를 상수로 두고 H를 갱신하고 이를 반복해 WH를 V에 근사한다. 이때 r개의 특징을 차원 축소할 때 행렬 W를 이용한다. PCA와 비교했을 때 잠재 변수가 무엇인지 설명하기 쉽다.

 

- LLE(국소 선형 임베딩): 비지도 학습에서 복잡한 구조를 갖는 데이터(ex. 스위스 롤)을 더 간단한 형태로 변환하는 작업이 중요한데 LLE는 높은 차원 공간에서 휘어지거나 뒤틀린 구조를 낮은 차원 공간에 단순한 구조로 나타낸다. 단순히 PCA처럼 선형으로 차원을 축소하는 것이 아닌 변수 사이의 상관관계가 있는 데이터에 적용해 스위스 롤 같은 비선형 데이터를 차원 축소할 때 유용하다. 데이터 포인트 x_i 근처의 있는 점(k개)을 찾고 근처에 있는 k개의 점의 선형 결합으로 x_i를 재구성하는 W_ij를 계산하고 모든 x_i에 대해 선형 결합과의 차이의 제곱합으로 오차 함수를 정의해 이를 최소화하는 가중치를 찾고 가중치 W_ij로 낮은 차원의 y_i를 계산하여 차원을 축소시킨다. 국소 선형 임베딩은 근처에 있는 점 개수가 결괴에 주는 영향이 커 주의 깊게 선택해야 한다.

 

- t-SNE(t-분포 확률적 임베딩): LLE와 같이 매니폴드 학습의 하나로 복잡한 데이터를 2차원또는 3차원으로 축소시켜 시각화한다. 여러 가지 데이터의 구조를 낮은 차원 공간에서 잘 나타내려는 방법론이다. 모든 ii, j 쌍에 대한 x_i, x_j 간의 유사도를 가우스 분포를 이용한 유사도로 나타내 x_i와 같은 개수의 점 y_i를 낮은 차원 공간에 무작위로 배치하고 모든 i, j상에 대해 y_i, y_j의 유사도를 t분포로 나타낸다. 이렇게 정의한 유사도 분포가 가능하면 같도록 데이터 포인트 y_i를 갱신해 수렴 조건까지 갱신을 반복한다. t 분포가 헤비테일 분포이므로 높은 차원 공간에서는 중심에서 먼 부분의 비중이 높아 데이터 일부분의 정보를 유지하기 어려워 4차원 이상의 공간은 차원 축소가 제대로 안될 수도 있다.

 

5. 도움되는 자료 추천 

최근에 머신러닝 공부를 하면서 도움을 받은 사이트, 유튜브들인데 한 번 확인해보길 바란다 :)  

 

- StatQuest with Josh Starmer의 ML 강의: 복잡한 수식 없이 직관적으로 받아들이기 좋다. https://www.youtube.com/watch?v=Gv9_4yMHFhI&list=PLblh5JKOoLUICTaGLRoHQDuF_7q2GfuJF&ab_channel=StatQuestwithJoshStarmer

 

- 공돌이의 수학정리 노트 블로그 & 유튜브 강의: 수식적 이해 뿐만 아니라 기하학적 의미까지 받아들이는 신기한 경험을 할 수 있다. 특히 다변수 미적분학에 대한 설명은 너무 깔끔해서 좋았다.

https://angeloyeo.github.io/2019/07/27/PCA.html

 

- 수학채널 쑤튜브: 무려 104개의 선형대수 강의가 준비되어 있으며 가우스-조단 소거법, 선형 사상 등 기본적인 내용뿐만 아니라 최소제곱법, 고유값 분해로 이미지 손실 압축, SVD 등 응용적인 내용도 다룬다. 이런 수준급의 한국어 강의를 만들어주셔 감사하다고 전하고 싶다.

https://www.youtube.com/watch?v=eskaY52FkeM&list=PLdEdazAwz5Q_n47tqf0QY94ASCmWqeGX1&index=95&ab_channel=%EC%88%98%ED%95%99%EC%B1%84%EB%84%90%EC%91%A4%ED%8A%9C%EB%B8%8C

 

- 혁펜하임 유튜브: 최근 수학적 최적화 강의로 인해 접했는데 딥러닝 강의 또한 좋다. 구현 및 활용보다 이론적인 부분에서 정말 감탄이 나온다. 개인적으로 newton methodbatch normalization 강의를 보고 감탄했었다. 머신러닝 공부를 하다 보면 항상 최적화에 대한 갈증이 생겼는데 어려운 내용을 이해가기 쉽게 설명해준다.

 

 

+ 최근 드는 생각 

알고리즘과 수식이 복잡해 회피했었던 고전적인 머신러닝 방법론들인데 이렇게 그림과 간단한 응용, 대략적인 알고리즘을 들으니 전체적인 흐름을 잡는데 도움이 되었다. 이제 선형대수와 통계쪽 지식이 늘었으니 수식적인 부분에 대해서도 공부해가고 싶다. 최근에. 오토 인코더를 활용한 차원 축소 등에 대해서도 접해봤었는데 차원 축소 방법론들을 깊게 파보고 싶은 마음이 많다. 이쪽 분야를 공부하면 할수록 트랜스포머, GAN 등을 활용한 최근의 딥러닝 모델도 흥미롭지만 더욱 근본을 추구하고 있는 나의 모습이 보인다. 단순히 딥러닝 모델을 활용하고 싶었던 1학년의 나, 그 작동원리와 해석, 시각화를 고민하던 2학년의 나, 이런 모델이 나오기 전까지 어떤 시도들을 진행해왔고 왜 잘 안되었는지가 궁금한 현재의 나를 볼 수 있다. 근데 슬프게도 이를 해결하기 위한 선형대수학, 미적분학, 통계이론, 최적화 이론, 영상 관련이론등은 현재 나의 지식을 훨씬 뛰어넘는 것들이 많다. 당장 위에서 정성적으로 설명한 고전적인 머신러닝 내용의 수식을 봐도 이해가 안되는 현재 시점에서 앞으로 어떤식으로 발전해야할까. 혹시 나와 같은 처지에 빠진 사람들은 어떻게 발전했는지 궁금하다. 또한 올해 입시를 잘 마무리하고 선형대수학과 다변수 미적분학, 수학적 최적화론에 대해 공부하고 세미나를 진행할 계획도 존재한다. 물론 지금 아는게 1도 없지만  쨋든 남은 마지막 학기 내신 후회없이 마무리하고 올해는 부끄럽지 않은 한 해가 되도록 열심히 살아보자 :)

Comments