인공지능/공부

모두를 위한 머신러닝 1 ~ 7주차 정리

이게될까 2024. 6. 9. 18:00
728x90
728x90

1주 차 

1차시 - 머신러닝이란?

머신러닝이란 == 이전의 경험이나 사례를 바탕으로 새로운 패턴을 예측한다.

인공지능 == 컴퓨터 시스템으로 인간의 지능으로 해결할 수 있는 문제를 푼다.
시각 인지, 청각 인지, 의사 결정을 한다.
머신러닝이란 인공지능의 한 분야로 컴퓨터 알고리즘이 경험으로부터 자동으로 학습하고 성능을 향상한다.

명확하게 프로그래밍하지 않아도 문제 해결 능력을 가지게 된다. 

일 T와 성능지표 P로부터 경험 E를 통해 학습한다. 경험으로부터 학습한다!

adaptive System - 오차로부터 학습한다.
T의 파라미터를 ouput에 대한 오차를 측정하여 학습한다.

y - prediction 출력값, h - Hypothese = 예측함수

예측함수는 parameters에 의해 표현되고, 오차를 줄여나가는 방향으로 예측함수가 변화된다.

Learning = 예측값을 점점 올바른 값으로 만들어내기 위해서 예측함수의 parameters를 업데이트시켜나가는 과정
주어진 데이터를 통해 진행되는데 정답(레이블)이 있어야 한다.

 

2차시 - 지도학습 

선형 회귀 분석 - 라벨링이 되어있는 데이터를 통해 우리가 예측하는 수를 찾는 방식 

classification - 주어진 데이터를 통해 예측함수를 찾아내고, 함수를 이용하여 주어진 입력에 대한 결과를 예측
제대로 분류하지 못하면 Miss Classification이라고 한다.

 

3차시 - 비지도 학습 

지도학습에서 분류할 때 라벨링 된 데이터가 필요하다. -> 분류 경계선 찾기 
비지도 학습은 정답이 주어지지 않고, 데이터가 어떤 유사성을 가지는지, 몇개의 그룹이 있는지 찾는다.

 

4차시 - 행렬과 백터 

행렬은 rows * columns로 표현되고, Transpose하면 columns * rows로 바뀐다.(Matrix Transpose)

내적 - 백터에서 같은 열끼리 곱한뒤 더한다 == 스칼라 값이다.
vector Norm == 백터의 크기 

대칭행렬 : 행렬이 대칭을 이룬다. (Symmetric Matrix)

detminant : 행렬의 규모를 측정한다. 00 -> nn - n0 -> 0n

 

5차시 - 행렬 벡터 연산 

행렬 합 : 행렬 크기가 동일해야 하고, 각 요소끼리 더한다. 
행렬과 스칼라 합, 곱 : 그냥 더하거나 곱하면 된다.

행렬 곱 : 크기가(m*n)(n*l) = (m * l)로 맞아야 되고, i행과 j열을 곱한다. 
교환법칙은 성립하지 않지만 ABC라면 무엇을 먼저하든 성립한다.

identity Matrix : 단위행렬 = 행렬의 ii만 1이고, 나머진 다 0이다.
단위행렬을 곱하면 항상 본인이 나온다.

Matrix Inverse: 오른쪽에서 곱할 때나 왼쪽에서 곱해줄 때나 마찬가지로 단위행렬이 나온다.
항상 존재하는 것이 아니고, 행과 열의 숫자도 같아야 한다. 

Non-Invertible Martix : 역행렬이 존재하지 않는 "특이 행렬"  

 

2주차

1차시 - 선형회귀 

데이터를 모으다 보면 데이터 간  상관관계를 알 수 있다. -> 없는 데이터의 값을 예측할 수 있다. == 선형 회귀 분석

Univariate Linear Regression : input변수가 하나인 선형회귀
Hypothesis가 Training Data Set을 통해 Learning Algorithm을 진행하고 예측함수 h를 만든다.
h(x) = b + wx의 구조를 보이고 오차를 통해 학습한다. 

 

2차시 - 비용함수

Predicion Error : 예측 함수가 실제로 가지고 있는 실제 출력과 우리가 목표하고 있는 값하고의 차이
e = h(x) - y
Sum of Square Errors : 에러들의 합 -> / m : Mean Square Error == 데이터 개수로 나눈다.

cost function

백터 w에 관해서 비용함수 J를 최소화하여 그때 얻을 수 있는 최적 파라미터를 w*라 한다.

비용 함숫값이 최소화되는 w값을 찾는 것이 목적이다. -> 미분해서 최소 값이 되는 곳으로 간다.
파라미터가 1개면 2차원, 2개면 3차원이 나온다.
등고선으로 표현하면 선으로 이어진 곳은 같은 비용함수를 가진다. 그러나 파라미터는 다르기 때문에 모양도 다르다.

 

3차시 - 경사하강법 Gradient Descent Algorithm

비용함수가 최솟값에 도달할 때까지 진행한다.

각 파라미터에 대해 편미분 한 값을 학습상수(알파, learning rate)에 곱한 다음 마이너스 시켜줌으로써 업데이트한다.

Global Miniumum : 전역 최소 - 제일 작은 값
Local Minimum : 국소 최소 - 주변에서 작은 값 : 초기값의 영향을 받는다.

Local minimum은 optimizer를 통해 조금 극복 가능하다.

 

4차시 - 경사 하강 개념

경사하강법 - 단계적으로 최솟값에 다가가기 위해 기울기 미분값을 빼는 방식으로 업데이트 

Learning rate가 너무 작으면 학습하는데 너무 오래 걸린다.
너무 크면 오버 슈팅이 발생하여 발산한다.
고정된 학습 상수값을 가지고 있더라도 점점 속도가 줄어들어 천천히 수렴한다.

 

5차시 - 경사 하강과 선형 회귀 

한 번에 gradient가 0이 되는 곳을 찾는다. 위에 떠있는 바는 평균을 뜻한다.(x의 평균, 라벨(y)의 평균)

선형 회귀 직선은 경사하강법을 사용하여 파라미터를 조금씩 업데이트하기 or 정확한 값 계산하기 

Batch Gradient Descent : 각 스탭마다 모든 data를 다 사용한다.
Stochastic Gradient Descent : 각 스탭마다 한 개의 sample를 사용한다.

input이 여러 개가 되면 Multivariate Linear Regression이 된다.

 

3주 차 

1차시 - 다 변수 선형회귀

다변수 선형 회귀 : 여러 개의 특징 값을 기반으로 한 예측 함수를 설계하는 문제이다.
파라미터는 input 개수보다 하나가 더 많다. (bias) -> x의 0행에는 1을 넣고 행렬 곱으로 하면 편하다.

경사하강법

경사 하강법을 진행할수록 비용함수가 감소하여 데이터의 트렌드를 잘 나타내는 직선(평면, 공간)으로 수렴한다.

n - feature #
m - data # 
x의 아래 - j번째 feature, 윗 첨자 - i번째 example 

 

2차시 - 특징값 스케일링

feature값의 범위가 다르면 비용함수 모양이 왜곡되어 경사 하강법이 잘 적용되지 않아 수렴에 영향을 줄 수 있다.
feature Scaling을 통해 데이터의 범위를 밸런스를 가지도록 한다. 

여러 개의 변수들이 가지는 값의 범위가 매우 다양할 때 필요한 기능이다.

 

3차시 - 경사 하강, 학습 속도 

Learning Curve를 통해 학습 속도를 판단하고, 경사하강법이 올바르게 작동하는지 확인한다.
단조 감소 (Monotone Decresing ) : 초기에 빠르게 감소하다가 수렴에 다가가면 천천히 감소한다. -> 비용 함숫값이 최솟값에 도달했는지 판단 가능 == 학습이 정상적으로 진행되며, 원하는 예측 함수 값이 되도록 업데이트가 잘 진행되고 있다.
오차가 더 이상 감소하지 않으면 비용함숫값이 최솟값에 도달했는지 판단할 수 있다.

learning rate가 너무 작으면 수렴하는데 너무 오래 걸린다.
learning rate가 너무 크면 모든 반복마다 감소하지 않거나, 수렴하지 않을 것이다.

 

4차시 - 새로운 특징 값 만들기 

부피는 길이 * 너비 * 높이다. -> 3개를 사용하지 말고 1개만 써보자 

feature 개수는 그대로지만 다항식을 추가하여 자유도를 높일 수 있다. -> 더 복잡하고 비선형성이 큰 곡선으로 회귀
그런데 다항식으로 제곱, 세제곱하게 되면 스케일링이 매우 중요해진다.
Square Root(Monotone Increasing) : 점점 증가하다가 어느 정도 이상이 되면 더 이상 커지지 않는 패턴에서 효과적으로 데이터를 표현하며, 선형 회귀 예측에 도움이 된다.

 

5차시 - 정규 방정식 Normal Equation

Xw = y -> w = X^(-1) y로 표현하기엔 X의 역함수를 구하기 힘들어서 어렵다. 

그래서 이러한 방식을 사용한다.

w = inv(X'*X)*X' * y

이 방식(n^3)은 feature 개수가 적어야지 쓸 수 있고, 많아지면 Gradient Descent 방식(n)이 더 좋다.

feature끼리 독립이 아닌 단순 비례관계와 같다면 사용할 수 없다.

 

4주 차

1차시 - 이진 분류 Binary classification

코로나 양성, 음성 -> 이진분류 = 데이터의 분류 결과가 2가지의 가능한 값으로만 나타나는 경우
{0,1}로 나타내고( [0,1]로 하면 0~1이다.), 관심 있는 경우, positive class를 1로 둔다.

Multiclass Labels도 가능하다.

선형 회귀는 이상치에 민감하고(Sensitive to Outliers), 결과도 0~1로 항상 고정되지 않아 적절하지 않다.

Logistic Regression인 Sigmoid가 등장한다.

h'(x) = h(x)(1-h(x))

결과가 크면 양성일 가능성이 높고, 작으면 음성일 가능성이 높다.
나온 결괏값이 양성일 확률이고, 음성일 확률과 양성일 확률을 더하면 1이다.

 

2차시 - 분류 경계선 Decision Boundary

파라미터에 값을 집어넣으면 Decision Boundary를 구할 수 있다. 

복잡한 경우 위와 같이 구하면 원이 나온다. (원점이 0,0이고 반지름이 1이다)

더 높은 차수의 다항식을 사용하면 복잡한 형태를 만들 수 있다.

 

3차시 - 로지스틱 회귀 : 비용함수 Logistic Regression Cost function

convex - 경사 하강법을 진행하다 보면 최솟값이 보장되어 있다.

Logistic Regression은 non-convex 비용함수 곡선을 만든다. -> 국소(Local) 최솟값에서 업데이트가 진행 X

Convex 함수로 만들자

비용함수가 Convex 하다 -> 전역 (Global) 최솟값에 접근이 가능하다.

 

4차시 - 최적화 optimization

gradient descent 대안이 라이브러리 형태로 구현되어 있다.

 

5차시 - Multiclass classification

one vs all - n개만큼의 분류 직선이 있고, 그 분류 직선에 해당되는 것만 그 class로 분류한다.

 

5주 차

1차시 - overfitting 과적합 

underfitting - 데이터를 잘 표현하지 못함 == High Bias
파라미터가 매우 적고, 학습 데이터도 잘 못 맞춰서 모델이 너무 단순하다.

overfitting - 데이터에 과하게 적합화 되어 새로운 데이터를 잘 표현할 수 없다. == High Variance
파라미터가 너무 많고, 학습 데이터는 잘 맞춘다.

해결법 - feature 수 줄이기, data set 늘리기, Regularization

 

2차시 - Regularization 정규화

정규화는 오버피팅이 발생되었을 때, 과적합을 예방하기 위해 사용한다.

페널티 항을 아주 작게 만들기 위해 w3, w4가 굉장히 작아진다 -> 모델의 복잡도가 줄어든다. -> overfitting 문제를 줄임

어떤 파라미터가 중요한지 판단하기 어렵다 -> 다하자

람다가 커지면 오버피팅을 피하는 역할이 커지고, 작아지면 training data에 잘 적응한다.

 

3차시 - 선형 회귀의 정규화 

정규화를 통해 수렴 속도가 빨라진다.

m(data) < n(features)인 경우 역행렬이 존재하지 않는데 regularization이 이를 해결해 준다.

 

4차시 - 로지스틱 회귀의 정규화

높은 차수의 다항식과, 너무 복잡해진 분류 경계선(decision boundaries) == overfitting => 정규화

0일 경우엔 정규화와 뒤에 붙은 x를 때 주면 된다.

 

5차시 - 다항 회귀의 정규화 

SSE (Sum of squres of the errors) : MSE와 비슷하나 데이터의 개수로 나눠주지 않는다.

Polyfit을 통해 최적 파라미터를 계산할 수 있다.

오버피팅을 감소하기 위해 train set을 늘리고, 정규화를 진행한다.
-> 차수가 높다 하더라도 데이터 개수만 충분히 있으면 over fitting을 피할 수 있다.
regularization이 너무 크면 언더 피팅이 발생할 수 있다.

 

6주 차

1차시 - 비선형 예측 함수 

컴퓨터 비전 - 사람의 두뇌처럼 컴퓨터도 사물을 인지한다. 수학적 알고리즘을 통해 이미지로부터 의미 있는 정보 추출

눈 - 카메라, 두되 - 머신러닝 알고리즘 
카메라로부터 얻은 수치 정보를 분석하여 정보를 추출하는 것이다
학습데이터를 통해 classification이 가능하다.(지도학습)

픽셀 정보는 대단히 많고, 복잡한 분류 경계선이 필요하다 - non linear decision boundary
input feature - 너비 * 높이 * (RGB라면) 3 -> 파라미터가 너무 많이 필요하다, 단순한 분류 경계선으로 분류하기 어렵다 
Quadratic, cubic, higher order polynomials, 굉장히 복합한 비선형 가설 예측함수가 필요하다.

Quadratic polynomial - 각각의 feature들을 2개씩 붙여서 모든 경우의 수를 다 사용한다 -> n^2

Cubic polynomial - 3개씩 붙여서 모든 경우의 수 -> 특징값의 n^3에 비례한다.

위 두 방식 모두 파라미터가 너무 많아서, 데이터가 충분하지 못해 오버피팅이 일어난다. -> 해결방법 필요

 

2차시 - 뉴런과 브레인 

두뇌는 100억 개의 뉴런과 6조 개의 시냅스 연결로 되어있다.
바이탈(혈압, 자기, 먹기)을 컨트롤하고, 움직임과 포즈를 제어하며(걷기, 뛰기), 시야 듣기와 같은 감각 기관을 통해 들어오는 신호도 처리한다.
뉴런이 전기 신호를 통해 정보를 전달한다.

사람의 두뇌는 다양한 입력 신호(시각, 청각, 미각, 촉각, 후각)에 대해 동일한 알고리즘을 적용한다.
청각 위치에 시각 정보를 연결함으로써 보는 것을 담당하는 것을 확인하였다.

뉴런은 전기 화학적 신호를 발생해서 다른 뉴런에 신호를 전달하며, 가중치를 조절한다.

 

3차시 - 뉴런 모델 표현 

인공 신경망은 사람의 두뇌를 인위적으로 표현하여 뉴런(node)과 뉴런 사이에 연결선(edge)이 있다.
node와 edge는 학습 진행함에 따라 조절해야 할 parameter(가중치)를 가지고 있다.

입력 레이어는 층으로 치지 않는다.

i열에는 i번째 노드의 파라미터들이 저장되어 있다.

 

4차시 - 신경 회로망 모델 표현 

Multilater Neural Networks : Single Layer Neural Networks에서 hidden layer가 추가된다.

Forward Propagation : 입력으로부터 들어오는 신호가 중간층을 거쳐 출력층에 도달하는 과정
가중치 합과 activation function을 반복해서 진행한다.

진행하면서 입력 신호가 점차 여러 개 형태의 특징 값들로 점차 변화된다.

많은 hidden Layers를 사용하면 표현 성능이 우수하고, 복잡한 문제 해결 시, 신경망 사용을 통해 필요로 하는 좀 더 복잡한 분류 경계선을 만들 수 있다.

 

5차시 - 논리 함수 구현 

XOR은 선형적인 경계썬으로 그룹을 분류할 수 없다.

2번째 레이어에서 output레이어로 가는 파라미터중 2번째 것은 +20이 되어야 겠네요 ㅎㅎ...

Multilayer 신경망을 구성하면 비선형 분류 경계선을 필요로 하는 비교적 복잡한 XNOR 논리 함수를 구현할 수 있다.
더 복잡한 분류 경계선을 만들고, 표현 방법도 더 강력해진다.
이미지 분류와 같은 컴퓨터 비전 문제, 분류 경계선이 비선형이고 복잡한 문제에 적용한다.

 

7주 차

1차시 - 비용함수

학습 알고리즘은 비용함수 정의 -> 비용함수를 표현하고 있는 파라미터 최적화 -> 예측함수 구현으로 이루어져 있다.
최적 파라미터를 구하는 과정을 Learning이라고 부르고, 오차를 최소화하는 방향으로 진행한다.

classification에서 2개라면 Binary classification이고 3개 이상이라면 Multi-class classification이다.
Multilayer == 하나 이상의 hidden layer를 포함하고 있다.
feedforward - 신호가 한 방향으로만 이동한다.

오차는 원하는 출력값 - 실제 출력값으로 구한다.

Cost funcation - Sum of squrare error => 이 값을 최소로 하는 파라미터를 계산한다.
목적은 얼마나 오차가 작게 잘 표현하고 있는지 평가하는 척도이다. 

 

2차시 - 오차 역전파 학습 알고리즘 backPropagation

신경회로망의 파라미터를 최적화하는 학습 알고리즘으로서 가장 널리 사용되고 있는 알고리즘이다
The Error Backpropagation algorithm == BP or EBP

 

3차시 - 신경 회로망 파라미터 최적화 

https://yoonschallenge.tistory.com/79

 

인공지능 backpropagation, optimization- 개념

backpropagation backpropagation은 대부분의 인공지능의 파라미터 업데이트 방식이다. 우린 경사하강법을 통해 loss를 최소화 시키는 방향으로 학습한다. 기본적인 gradient 계산 방법이다. 이제 activation fun

yoonschallenge.tistory.com

 

4차시 - 오차 역전파 알고리즘의 행렬 표현

Stopping Criteria - 역전파 알고리즘을 언제 멈출 것 인가에 대한 기준

Gradient threshold : 일정 기준에 도달해야 하기 때문에 오래 걸릴 수 있다. 
Average error measure : 평균 error를 측정하여 변화가 적을 때 멈춘다. - 파라미터 튜닝이 필요

initializing Weights : 업데이트 전 weight 값을 초기화한다
-1 ~ +1의 랜덤 한 값으로 진행한다. 

Sequential Update - Weight 업데이트가 일어나는 과정을 하나씩 진행
각 샘플마다 업데이트를 진행하므로 학습 속도가 빠르고, 구현하기 쉽다. local  min에 빠지지 않을 수 있다.

Batch Update - Weight 업데이트를 한 번에 모아서 진행
모든 sample를 사용해 weight를 업데이트하고, 로컬 미니멈에 빠질 수 있으며, 메모리가 더 필요하다.

 

5차시 - 오차 역전파 알고리즘 응용

학습이 진행됨에 따라 학습 오차는 서서히 줄어든다.
데이터 수가 많아질수록 하나의 epoch를 완성하는데 드는 시간은 오래 걸린다.

애매모호한 입력이 주어졌을 때 학습된 신경 회로망이 잘못된 결과를 만들어 낼 수 있다.(Confidence Level이 0.5 이하인 것이 많거나, 다른 값을 고른다.)
잘 학습시킨 신경 회로망은 비교적 높은 정확도를 가진다.

 

728x90