촉촉한초코칩

Machine Learning 1 (~학습 및 테스트 세트) 본문

Study/PBL

Machine Learning 1 (~학습 및 테스트 세트)

햄친구베이컨 2024. 5. 21. 16:03

https://developers.google.com/machine-learning/crash-course?hl=ko

 

프레이밍 : 주요 ML 용어

 

지도 머신러닝 : 입력을 결합하여 모델을 만들고 다음 데이터를 예측한다.

라벨 : 예측하는 항목

기능 (특성) : 입력 변수 

 

ex) 스팸 감지기

데이터의 특정 인스턴스 : x (벡터)

라벨이 있는 예시

  • 특성과 라벨 모두 포함된다. 
  • 라벨이 지정된 예시는 사용자가 명시적으로 '스팸' 또는 '스팸 아님'으로 표시한 개별 이메일이다. 
labeled examples: {features, label}: (x, y)

 

라벨이 없는 예시

  • 특성은 포함되지만 라벨은 포함되지 않는다. 
unlabeled examples: {features, ?}: (x, ?)

 

모델

  • 특성과 라벨 간의 관계 정의
  • 모델 수명 주기의 2단계
    • 학습 : 모델을 만들거나 학습하는 것. 즉, 라벨이 있는 예시를 모델에게 보여주고, 모델이 특성과 라벨 간의 관계를 점진적으로 학습한다.
    • 추론 : 학습된 모델을 라벨이 없는 예시에 적용하는 것. 학습된 모델을 사용하여 유용한 예측을 수행한다. 

 

회귀와 분류

  • 회귀 : 연속적인 값을 예측한다.
  • 분류 : 불연속 값을 예측한다. 

 

ML 내림차순

 

  • x 축 : 입력값 (주택 면적)
  • y축 : 목표값 (주택 가격 예상)
  • 주택면적 입력 > 주택 가격 예측하여 출력 
  • y = wx * b
    w : 기울기 
  • 손실 : (실제 값 - 예측 값)^2
    (y - y')^2

> L2 손실 : 오차 제곱 

 

데이터 세트에서 L2 손실 정의

 

선형 회귀

데이터 : 귀뚜라미가 분당 우는 소리와 온도에 관한 데이터 

1. 데이터 표시 : 1분당 우는 횟수와 섭씨의 온도 비교 

여기에 직선 한 개를 그려서 관계를 추정한다. 

2. 선형 관계

선에 방정식을 사용하여 정의한다 : y = mx + b

  • y : 예측하려는 온도인 섭씨
  • m : 선의 기울기
  • x : 분당 우는 횟수 (입력 특성의 값)
  • b : y 절편 

머신러닝에 따라 방정식을 다르게 작성할 수도 있다 > y' = b + w1x1

  • y' : 예측된 라벨 (원하는 출력값)
  • b : 편향이라고 칭하는 y절편 (x0이라고도 함)
  • w1 : 특성 1의 가중치. 가중치는 선의 전통적인 등식에서 m 기울기와 동일
  • x1 : 특성 (입력값)

분당 우는 횟수 y'값으로 온도를 추론(예측)하려면 x1 모델에 x1 값을 바꾸면 된다.

여러 특성(별도의 가중치)을 갖는 새 모델을 작성하면 다음과 같다 > y' b + w1x1 + w2x2+ w3x3

 

학습 및 손실 

  • 모델 학습 = 라벨이 있는 데이터를 바탕으로 모든 가중치와 편향의 양호한 값을 학습(결정)하는 것
  • 경험적 위험 최소화 : 많은 예를 검사하고 손실을 최소화하는 모델을 찾으려고 시도함으로써 모델을 빌드하는 것
  • 손실 = 하나의 예에 대한 모델의 예측이 얼마나 잘못되었는지 나타내는 숫자 
  • 모델 학습의 목표 : 모든 예시에서 평균적으로 손실이 낮은 가중치와 편향의 집합을 찾는 것 

 

제곱 손실 : 널리 사용되는 손실 함수 

선형 회귀 모델 : 제곱 손실 (L2 손실)

= the square of the difference between the label and the prediction
= (observation - prediction(x))2
= (y - y')2

 

평균 제곱 오차 (MSE) : 전체 데이터 세트에 대한 예시당 평균 제곱 손실 

MSE를 계산하려면 개별 예의 모든 제곱 손실을 합산한 후 예시 수로 나눈다.

수식과 예시

  • (x,y)
    x : 모델이 예측하는데 사용하는 특성 집합 (ex 분당 우는 소리, 연령, 성별)
    y : 예시 라벨 (ex 온도)
  • prediction(x) : 특성 세트와 결합된 가중치 및 편향의 함수 
  • D : 라벨이 있는 여러 예를 포함하는 데이터 세트 > (x, y) 쌍
  • N : D의 예시 수 

 

손실 줄이기 - 반복적 접근 방식 

 

손실 줄이기 : 반복 방식
1. 반복적인 모델 학습 방법을 사용합니다.

1. 반복적인 모델 학습 방법 사용 

  • 모델 : 하나 이상의 특성을 입력으로 사용하고 하나의 예측을 출력을 반환 
    ex) y' = b + w1x1

2. 손실 함수 (제곱 손실 함수 사용) > 2개의 입력값을 가짐
ex) y' : 특성 x에 대한 모델의 예측, y : 특성 x에 해당하는 올바른 라벨 > (y-y')^2

3. 매개변수 업데이트 계산 : 손실 함수의 값을 검토하고 b 및 w1의 새 값을 생성하는 단계 

  • 손실이 가장 적은 모델 매개변수를 발견할 때까지 학습 반복
  • 전체 손실의 변화가 멈추거나 적어도 매우 느리게 변경될 때가지 반복한다. 

경사하강법 블록 다이어그램

 

경사하강법
2. 회귀 문제에서는 볼록 손실과 가중치 도표를 비교하여 산출합니다.

손실을 최소화하는 방법으로 작은 조치(경사보폭)를 반복적으로 취한다. 

w1의 가능한 모든 값에 대한 손실을 계산할 경우, 손실과 w1의 비교 도포는 항상 볼록하게 된다.

이때 볼록문제에는 최솟값이 하나만 존재 = 기울기가 정확히 0인 장소가 1개 = 이 최솟값이 손실 함수가 수렴하는 지점

모든 w1값에 대한 손실 함수를 계산하기 위해 경사하강법 사용 

그림 3. 경사하강법의 시작점

먼저 w1의 시작값(시작점)을 선택한다.
그림에서는 0보다 약간 큰 시작점을 선택했다. 

다음 경사하강법 알고리즘이 시작점에서 손실 곡선의 기울기를 계산한다. 
손실의 기울기는 곡선의 도함수(기울기)와 동일하며 어떤 방향이 '더 따뜻한지', '더 차가운지' 알려준다.

가중치가 여러 개인 경우 기울기는 가중치를 기준으로 한 편미분의 벡터이다. 

기울기가 갖는 특성 : 방향, 규모 

그림 4. 경사하강법은 음의 경사를 사용합니다.

경사는 항상 손실 함수가 가장 크게 증가하는 방향을 가리킨다. 

경사하강법은 가능한 빨리 손실을 줄이기 위해 음의 기울기 방향으로 움직인다. 

 

 

그림 5. 경사 보폭을 통해 손실 곡선의 다음 지점으로 이동합니다.

손실 함수 곡선의 다음 지점을 결정하기 위해 
기울기 크기의 일부를 시작점에 더한다. 

 

 

 

> 이 과정을 반복하여 최솟값에 접근한다. 

 

  • 경사 방향으로 이동하여 새로운 손실을 구한다. 
  • 가다보면 극소값?을 구하게 된다. 이 값에서 음의 경사를 구하면 왔던 방향으로 돌아가게 된다. 

 

* 가중치 = 임의의 값일 수도 있다.

 

 

학습률

  • 경사에 학습률을 곱해 다음 지점을 결정한다. 
  • 초매개변수 : 모델의 학습 방식을 조정하는 데 사용되는 구성 설정

그림 6. 학습률이 너무 작습니다.

그림 7. 학습률이 너무 큽니다.

학습률을 너무 크게 지정하면 

다음 지점이 무질서하게 이탈하게 된다. 

 

 

그림 8. 학습률이 적절합니다.

모든 회귀문제에는 골디락스 학습률이 존재
골디락스 값 : 손실 함수가 얼마나 평탄한가 

손실 함수의 기울기가 작다는 것을 알고 있으면 더 큰 학습률을 시험해볼 수 있다. > 작은 기울기를 보완하고 보폭 크기가 커짐

 

 

학습률 최적화

학습률을 1로 설정했을 때 오류가 나는 이유

  • 경사하강법은 최저값에 도달하지 않는다.
  • 따라서 단계의 크기가 서서히 증가한다.
  • 각 단계가 바닥으로 내려가는 대신 곡면을 오르게 된다. 

 

 

 

 

 

 

확률적 경사하강법 (SGD)

  • 데이터 세트에는 엄청난 양의 데이터가 존재할 수도 있고, 엄청난 수의 특성이 포함될 수도 있다. 
    배치가 매우 크면 한 번의 반복으로도 계산하는데 오랜 시간이 걸린다. 
  • 확률적 경사하강법은 데이터 세트에서 예를 무작위로 선택하여 훨씬 작은 데이터에서 큰 평균을 추정한다. 
  • 반복이 충분하면 SGD가 작동하지만 노이즈가 매우 크다. 

 

미니 배치 확률적 경사하강법 (미니 배치 SGD)

  • 일반적으로 10~1000개의 예시로 구성되며 무작위로 선택된다.
  • SGD의 노이즈 양이 줄어들지만 전체 배치보다 효율적이다. 

실습 : https://playground.tensorflow.org/#activation=tanh&batchSize=10&dataset=circle&regDataset=reg-plane&learningRate=0.03&regularizationRate=0&noise=0&networkShape=4,2&seed=0.94553&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false

https://developers.google.com/machine-learning/crash-course/reducing-loss/playground-exercise?hl=ko%EF%BB%BF

 

일반화

 

 

머신러닝 세부 사항

  • 분포에서 독립적이고 동일한 방식으로 무작위로 예를 추출
  • 분포가 정상성을 보인다면 > 시간이 지나도 변하지 않는다.
  • 학습, 검증, 테스트 세트를 포함하여 항상 동일한 배포에서 가져온다. 

 

과적합의 위험

ex) 각 점은 숲 속 나무의 위치를 나타낸다. 

  • 파란색 점 : 아픈 나무
  • 주황색 점 : 건강한 나무

 

 

 

 

 

2. 병든 나무와 건강한 나무를 구별하기 위한 모델 

그림 2

3. 건강한 나무로부터 병든 나무를 분리한다. (낮은 손실)
이때 데이터를 추가하면 분류에 적용하지 못하게 된다. 

그림 3

> 그림 2와 3의 모형은 과적합 모델이다. 

 

과적합 모델

  • 손실은 적지만 새로운 자료에 대한 예측은 잘 하지 못한다. 
  • 필요 이상으로 복잡하게 만들게 된다. 

 

* 기계 학습의 목표 : (숨겨진) 실제 확률 분포에서 추출한 새로운 데이터를 잘 예측하는 것 

데이터 세트로부터 모델을 구축한다면, 어떻게 데이터를 얻을 수 있는가? > 데이터 세트를 2개의 부분 집합으로 나누기

  1. 훈련 집합 : 모델을 훈련하기 위한 부분 집합
  2. 검정 집합 : 모형을 검정하기 위한 부분 집합 

 

일반화 정리

  1. 분포에서 임의로 독립적이고 동일한 예제들은 서로 영향을 미치지 않는다.
  2. 분포가 고정되어 있다. (분포가 데이터 세트내에서 변경되지 않는다.)
  3. 동일한 분포의 파티션에서 예제를 추룰한다.  

 

학습 및 테스트 세트 

 

* 테스트 세트 : 학습 세트로부터 개발한 모델을 평가하는 데 사용되는 데이터 세트 

데이터 분할 : 데이터 세트 파티셔닝

* 데이터를 나눌 때(학습/테스트 세트) 편중되지 않도록 한다. 
학습 세트 : 모델을 학습시키기 위한 하위 세트
테스트 세트 : 학습된 모델을 테스트하기 위한 하위 집합 

1. 데이터 세트 하나를 > 학습/테스트 세트로 분할 

 

 

이때 테스트 세트는 2가지 조건을 충족해야 함

  1. 통계적으로 유의미한 결과를 얻을 수 있도록 커야 한다.
  2. 데이터 세트를 전체적으로 나타내야 한다. (학습 세트와 특성이 다른 테스트 세트를 선택하지 않도록 한다.)

크기를 나누는 방법

  • 학습 세트가 클 때 : 학습 모델 우수해짐 
  • 테스트 세트 : 평가 측정 신뢰도 향상 

2. 테스트 데이터를 기준으로 학습된 모델의 검증

주의할 점

  • 테스트 데이터로 학습하지 않기 
  • 데이터 세트가 많을수록 좋다. 

실습 - https://developers.google.com/machine-learning/crash-course/training-and-test-sets/playground-exercise?hl=ko

https://playground.tensorflow.org/#activation=tanh&batchSize=10&dataset=circle®Dataset=reg-plane&learningRate=0.03®ularizationRate=0&noise=0&networkShape=4,2&seed=0.94553&showTestData=false&discretize=false&percTrainData=50&x=true&y=true&xTimesY=false&xSquared=false&ySquared=false&cosX=false&sinX=false&cosY=false&sinY=false&collectStats=false&problem=classification&initZero=false&hideText=false

 

'Study > PBL' 카테고리의 다른 글

Machine Learning 3  (0) 2024.05.28
Machine Learning 2  (0) 2024.05.27
MFCC, STFT  (0) 2024.05.20
Tensorflow 강의 정리  (0) 2024.05.15
[Crypto Zombies] Beginner  (0) 2024.04.01