Polynomial regression.ipynb
0.19MB

 

・혹시 전기세가 단순히 depth나 frontag뿐만 아니라 그 두개의 곱인 depth*frontag feature와 연관성이 있다면?

 

 

・polynomial regression : 단순 선형방정식을 비선형방정식(선으로된 그래프가 아니라 막 굴곡있는 그래프)으로 변형하여 모델링을 더 적합하게 하는 기법

 

 

・Ridge는 L2 regularzation, Lasso는 L1 regularzation을 의미

 

 

 

 

 

 

 

 

 

 

 

 

 

'C Lang > machine learing' 카테고리의 다른 글

9-1. logistic regression overview  (0) 2019.05.08
8-7. sampling method  (0) 2019.05.07
8-5. sklearn Linear Model family  (0) 2019.05.06
data processing, type of scalers  (0) 2019.05.06
8-4. Regularization – L1, L2  (0) 2019.04.20
 
 
 
 
 
 
 

'C Lang > machine learing' 카테고리의 다른 글

8-7. sampling method  (0) 2019.05.07
8-6. polynomial regression  (0) 2019.05.06
data processing, type of scalers  (0) 2019.05.06
8-4. Regularization – L1, L2  (0) 2019.04.20
8-3. Overfitting and regularization overview  (0) 2019.04.18

[Python] 어떤 스케일러를 쓸 것인가?(https://mkjjo.github.io/python/2019/01/10/scaler.html)

By MK on January 10, 2019


데이터를 모델링하기 전에는 반드시 스케일링 과정을 거쳐야 한다. 스케일링을 통해 다차원의 값들을 비교 분석하기 쉽게 만들어주며, 자료의 오버플로우(overflow)나 언더플로우(underflow)를 방지하고, 독립 변수의 공분산 행렬의 조건수(condition number)를 감소시켜 최적화 과정에서의 안정성 및 수렴 속도를 향상 시킨다.

특히 k-means 등 거리 기반의 모델에서는 스케일링이 매우 중요하다.

회귀분석시 조건수라는 개념이 있는데 그 내용은 아래와 같다.



회귀분석에서의 조건수


고유값(Eigenvalue)과 관련된 조건수(Condition Number)의 관계를 나타내는 산식은 c = condeig(A)이다.

A의 고유값에 대한 조건수의 벡터를 반환한다. 이 조건수는 좌고유벡터와 우고유벡터 사이 각도의 코사인의 역수이다..라고 하는데,

복잡한 얘기는 생략하고 핵심만 파악해보자.

함수의 조건수(condition number)는 argument에서의 작은 변화의 비율에 대해 함수가 얼마나 변화할 수 있는지 에 대한 argument measure이다.

조건수가 크면 약간의 오차만 있어도 해가 전혀 다른 값을 가진다. 따라서 조건수가 크면 회귀분석을 사용한 예측값도 오차가 커지게 된다.

회귀분석에서 조건수가 커지는 경우는 크게 두 가지가 있다.

1) 변수들의 단위 차이로 인해 숫자의 스케일이 크게 달라지는 경우. 이 경우에는 스케일링(scaling)으로 해결한다.

2) 다중 공선성 즉, 상관관계가 큰 독립 변수들이 있는 경우, 이 경우에는 변수 선택이나 PCA를 사용한 차원 축소 등으로 해결한다.



그리고 다음과 같은 경우에는 로그 함수 혹은 제곱근 함수 등을 사용하여 변환된 변수를 사용하면 회귀 성능이 향상될 수도 있다.

독립 변수나 종속 변수가 심하게 한쪽으로 치우친 분포를 보이는 경우 독립 변수와 종속 변수간의 관계가 곱셈 혹은 나눗셉으로 연결된 경우 종속 변수와 예측치가 비선형 관계를 보이는 경우

대부분 우리가 다루는 데이터 중 금액처럼 큰 수치 데이터에 로그를 취하게 되는 이유 이기도 하다.

보통 이런 데이터는 선별적으로 로그를 취한 후 모델링 전 전반적으로 스케일링을 적용한다.(in my opinion)



그렇다면 어떤 스케일링 기법을 적용해야할까?



스케일링의 종류


Scikit-Learn에서는 다양한 종류의 스케일러를 제공하고 있다. 그중 대표적인 기법들이다.

 

데이터를 기준으로 범위를 변환하는 법 : 4가지 (https://data-newbie.tistory.com/23)

 

 

변환법

 

설명 

 StandardScaler

 평균 0 분산 1로 변경 모든 특성이 같은 크기 가지게 한다 

-> 최솟값과 최댓값 크기를 제한하지는 않는다.

 RobustScaler 

 특성들이 같은 스케일을 갖게 된다는 것은(Standscaler 와 비슷)

-> 하지만 평균과 분산 대신 중간 값(median) 와 사분위값(quantile) 사용한다

-> 측정 에러의 영향을 받지 않는다 (이상치 영향 안받음)

MinMaxScaler 

모든 특성이 정확하게 0과 1 사이에 위치하도록 한다

2차원 데이터 셋의 경우에는 x 축의 0과 1 , y축 0과 1 

Normalizer 

특성 벡터의 유클리드안 길이가 1이 되도록 데이터 포인트를 조정한다.

-> 다른 말로하면 지름이 1인 원에(3차원에서는 구)에 데이터 포인트를 투영합니다. 

-> 이 말은 데이터 포인트가 다른 비율로(길이에 비례) 스케일이 조정된다는 것이다

-> 이러한 정규화는 특성 벡터의 길이는 상관없고 데이터 방향(도는 각도)만이 

중요할 때 많이 사용 된다. 

1. StandardScaler


평균을 제거하고 데이터를 단위 분산으로 조정한다. 그러나 이상치가 있다면 평균과 표준편차에 영향을 미쳐 변환된 데이터의 확산은 매우 달라지게 된다.

따라서 이상치가 있는 경우 균형 잡힌 척도를 보장할 수 없다.

from sklearn.preprocessing import StandardScaler standardScaler = StandardScaler() print(standardScaler.fit(train_data)) train_data_standardScaled = standardScaler.transform(train_data)

 

2. MinMaxScaler


모든 feature 값이 0~1사이에 있도록 데이터를 재조정한다. 다만 이상치가 있는 경우 변환된 값이 매우 좁은 범위로 압축될 수 있다.

즉, MinMaxScaler 역시 아웃라이어의 존재에 매우 민감하다.

from sklearn.preprocessing import MinMaxScaler minMaxScaler = MinMaxScaler() print(minMaxScaler.fit(train_data)) train_data_minMaxScaled = minMaxScaler.transform(train_data)

 

3. MaxAbsScaler


절대값이 0~1사이에 매핑되도록 한다. 즉 -1~1 사이로 재조정한다. 양수 데이터로만 구성된 특징 데이터셋에서는 MinMaxScaler와 유사하게 동작하며, 큰 이상치에 민감할 수 있다.

from sklearn.preprocessing import MaxAbsScaler maxAbsScaler = MaxAbsScaler() print(maxAbsScaler.fit(train_data)) train_data_maxAbsScaled = maxAbsScaler.transform(train_data)

 

4. RobustScaler


아웃라이어의 영향을 최소화한 기법이다. 중앙값(median)과 IQR(interquartile range)을 사용하기 때문에 StandardScaler와 비교해보면 표준화 후 동일한 값을 더 넓게 분포 시키고 있음을 확인 할 수 있다.

IQR = Q3 - Q1 : 즉, 25퍼센타일과 75퍼센타일의 값들을 다룬다.

아웃라이어를 포함하는 데이터의 표준화 결과는 아래와 같다. 

from sklearn.preprocessing import RobustScaler robustScaler = RobustScaler() print(robustScaler.fit(train_data)) train_data_robustScaled = robustScaler.transform(train_data)

결론적으로 모든 스케일러 처리 전에는 아웃라이어 제거가 선행되어야 한다. 또한 데이터의 분포 특징에 따라 적절한 스케일러를 적용해주는 것이 좋다.



데이터 분포별 변환 결과


변환 분포를 살펴보면 StandardScaler와 RobustScaler의 변환된 결과가 대부분 표준화된 유사 형태의 데이터 분포로 반환된다.

MinMaxScaler특정값에 집중되어 있는 데이터가 그렇지 않은 데이터 분포보다 1표준편차에 의한 스케일 변화값이 커지게 된다. 한쪽으로 쏠림 현상이 있는 데이터 분포는 형태가 거의 유지된채 범위값이 조절되는 결과를 보인다.

MaxAbsScaler의 경우, MinMaxScaler와 유사하나 음수와 양수값에 따른 대칭 분포를 유지하게 되는 특징이 있다.

그리고 마지막 이미지를 통해 살펴보면, 대부분의 스케일링 기법에서 아웃라이어는 변환 효과를 저해하는 요소임이 드러난다.

유의해야할 점은, 스케일링시 Feature별로 크기를 유사하게 만드는 것은 중요하지만, 그렇다고 모든 Feature의 분포를 동일하게 만들 필요는 없다.

특성에 따라 어떤 항목은 원본데이터의 분포를 유지하는 것이 유의할 수 있다. 예로 데이터가 거의 한 곳에 집중되어 있는 Feature를 표준화시켜 분포를 같게 만들었을때 작은 단위의 변화가 큰 차이를 나타내는 것으로 반영될 수 있기 때문이다.

L2 regularization은 Ridge reregularization이라 불리고
L1 regularization은 Lasso reregularization이라 불린다

・위식을 보면 왜 regularization을 위해 추가적인 θ값을 붙였는지 이해할 수 있는데

learning rate α < 1

the number of traing dataset m > 10

generally λ < m

이 되므로, λ가 커질 수록 θi값은 감소하게 된다.

・θi값이 작아지면 작아질 수록 변곡점이 평탄해지므로, θi값을 가능한한 작게 만드는 것이 regularization의 목적임을 잊지말자.

・위 그래프는 정규화가 필요한 이유와 그 효과를 설명하기 위한 그래프이다.

・Outlet_identifier_Out027과 Ouutlet_Type_Supermarket_Type3 feature의 계수가 다른 계수에 비해 월등히 큰것을 알 수 있는데, 이는 위의 두 계수에 의해 결과값이 널뛰기를 한다는 것을 의미한다. 따라서, 계수의 크기를 적당히 낮춰주어야할 필요성이 있다.

・alpha의 크기에 따라 계수의 크기가 줄어드는 것을 확인할 수 있다.

(https://brunch.co.kr/@itschloe1/11)

・L1은 절대값을 통한 regularization작업으로, 절대값은 미분을 실행함에 있어서 부가적인 작업이 필요하게 되므로 식 전개에 불편함이 따른다. 때문에 L2가 더 빈번히 이용된다.

・편의상 2개의 feature만 존재한다고 하면, L1과 L2는 위와 같이 그려질 수 있다. L1은 절대값 함수 이기 때문에, 마름모 모야의 그래프가 되고, L2는 제곱함수 이기 때문에 원모양의 그래프가 된다.

・L1의 직선의 성질과 L2의 원의 성질은 실제로 다음 슬라이드와 같이 그려지며, 그로 부터 기인된 성질(다다음 슬라이드)을 가진다.

 

 

・Overfitting된 경우, train데이터 과도하게 피팅되어 training값 이외의 feature값을 넣었을 때는 예측하기 어려워진다.

・오버 피팅된 데이터는 변곡점이 많다.

 

・이때 「보다 적은 수의 논리」란 weight값을 적게하라는 의미이다.

 

 

・Bias(편향)이란 최저점이 되는 weight값에 가까이 가지 못하고, 편향되어 딴 곳에서 겉돌고 있는 것을 의미한다.

 

 

・Overfitting된 데이터의 경우, Trainset에는 놀라울 정도로 잘 맞아떨어지지만 Testset의 값에 따른 결과는 예측해내지 못해는 모델이 된다. 테스트가 진행될 수록 (epoch)이 증가할 수록 trainset의 결과와 점점 멀어진다.

 

 

・더 많은 데이터를 활용하는 것이 가장 적합한 weight값을 찾기위한 가장 좋은 방법이다.

・parameter(러닝레이트 같은 hyper parameter)값은 보통 try-error의 방법으로 조정해나간다.

・Regulariztion이란 weight값을 0에 가깞게 조정하여 bias,variance를 조정하는 방법이다.

 

 

・이 가으이에서 수식 무슨 말인지 모르겠다 다음 강의를 보자.

 

 

・noise 는 분산과 같이 값이 퍼져있는 정도를 의미한다.

 

 

・BATCH_SIZE : 한 번의 배치에 사용되는 데이터 사이즈

・batch : 전체 데이터 사이즈에서 batch_size를 나눈 값을 loop되는 횟수를 의미

・세로축은 cost값인데 값이 매우 불안정하게 튀고있음을 알수 있다.

 

 

 

 

 

single gradient descent와 stochstic gradient descent는 싱글 데이터를 이용하므로 가장 시간이 오래걸린다.

full-batch gradient descent는 모든 트레이닝 데이터를 한번에 이용하므로 트레이닝 시간이 가장 짧다.

minibatch-SGD는 싱글 경사하강보다는 짧지만, 풀베치보다는 긴 시간이 걸린다.

 

single gradient descent와 full-batch gradient descent는 local-optimal에 빠질 수 있기 때문에 시간이 짧고 local-optimal을 회피할 수 있는 minibatch-SGD가 가장 많이 사용된다.

 

 

・learning rate가 매회 일정하면, 최적값을 찾는 순간 그 값을 넘어 최저값의 반대편으로 넘어갈 수 있다(위그림의 최저 부분 참고)

・때문에 테스트 회수마다 learning rate를 감소시키면 최저값을 더 잘 찾수있지 않을까?

 

・특히 SGD의 경우 learning rate가 일정할 경우 값이 최저값 부근에서 반복만 될뿐 최저값이 더 이상 가깝게 가지 못하는 문제가 발생한다.

 

・위에서 봤듯, 어느 정도 트레이닝을 시키면 그 이후에는 값이 일정하게 왔다리 갔다리 하므로 종료조건을 설정해서 불필요한 트레이닝을 그치게 만든다.

 

 

 

https://datasheet.tistory.com/47

손실 줄이기(Reducing Loss)

모델을 학습하려면 모델의 손실을 줄이기 위한 좋은 방법이 필요합니다. 반복 방식은 손실을 줄이는 데 사용되는 일반적인 방법 중 하나로 매우 간편하고 효율적입니다.

To train a model, we need a good way to reduce the model’s loss. An iterative approach is one widely used method for reducing loss, and is as easy and efficient as walking down a hill.

학습 목표(**Learning Objectives)**

  • 반복 방식을 사용하여 모델을 학습하는 방법을 알아봅니다.

  • Discover how to train a model using an iterative approach.

  • 전체 경사하강법과 다음과 같은변형된 방식을 이해합니다.

  • Understand full gradient descent and some variants, including:

  • 미니 배치 경사하강법

  • mini-batch gradient descent

  • 확률적 경사하강법

  • stochastic gradient descent

  • 학습률을 실험합니다.

  • Experiment with learning rate.

드디어 손실 줄이기(Reducing Loss) 단원의 마지막 강의인 확률적 경사하강법까지 왔네요.

글 밖에 없어 지루해 보이지만, 같이 살펴보도록 하겠습니다.

확률적 경사하강법(Stochastic Gradient Descent)

먼저 배치(batch) 에 대해서 설명하네요.

경사하강법에서배치는 단일 반복에서 기울기를 계산하는 데 사용하는 예의 총 개수입니다. 지금까지는 배치가 전체 데이터 세트라고 가정했습니다. 하지만 Google 규모의 작업에서는 데이터 세트에 수십억, 수천억 개의 예가 포함되는 경우가 많습니다. 또한 대개 Google 데이터 세트에는 엄청나게 많은 특성이 포함되어 있습니다. 따라서 배치가 거대해질 수 있습니다. 배치가 너무 커지면 단일 반복으로도 계산하는 데 오랜 시간이 걸릴 수 있습니다.

In gradient descent, abatchis the total number of examples you use to calculate the gradient in a single iteration. So far, we've assumed that the batch has been the entire data set. When working at Google scale, data sets often contain billions or even hundreds of billions of examples. Furthermore, Google data sets often contain huge numbers of features. Consequently, a batch can be enormous. A very large batch may cause even a single iteration to take a very long time to compute.

배치(batch) 는 용어집(Gloassary) 에서 더 쉽게 풀어 써놔서, 용어집에 있는 내용을 가져와 보겠습니다.

배치(batch)

모델 학습의 반복 1회, 즉 경사 업데이트 1회에 사용되는 예의 집합입니다.

The set of examples used in one iteration (that is, one gradient update) of model training.

제 나름 더 풀어보자면, 그래프 상에서 1회 이동 하는데 사용되는 데이터, 엑셀로 따지자면 행의 갯수라고 할 수 있습니다.

사진1. 처럼 딱 한 번 이동하는데 쓰이는 데이터라는 말이죠.

사진1. 기울기 벡터

이걸 여러번 해야하는데, 그때마다 데이터를 굉장히 많이 불러온다면 시간이 엄청 오래걸리겠죠.

다음 내용으로 넘어가 보겠습니다.

무작위로 샘플링된 예가 포함된 대량의 데이터 세트에는 중복 데이터가 포함되어 있을 수 있습니다. 실제로 배치 크기가 커지면 중복의 가능성도 그만큼 높아집니다. 적당한 중복성은 노이즈가 있는 기울기를 평활화하는 데 유용할 수 있지만, 배치가 거대해지면 예측성이 훨씬 높은 값이 대용량 배치에 비해 덜 포함되는 경향이 있습니다.

A large data set with randomly sampled examples probably contains redundant data. In fact, redundancy becomes more likely as the batch size grows. Some redundancy can be useful to smooth out noisy gradients, but enormous batches tend not to carry much more predictive value than large batches.

앞서 배치에 전체 데이터를 사용하는 것에는 문제가 있다는 것을 이야기 했습니다.

그래서 여기서는 무작위로 데이터를 일부 뽑아냈을 경우의 문제점을 이야기하고 있습니다.

무작위로 데이터를 뽑아 낼 때 중복 데이터를 뽑아낼 가능성이 있고, 적당한 중복은 도움이 될 수 있다고 합니다.

하지만, 무작위로 뽑아낸 데이터가 너무 많아지면 정확도를 높이는데 영향을 미칠 수 있는 유의미한 데이터의 비중이 낮아지게 된다고 하네요.

중복에 관한 내용은 특성이 한 개 일때를 가정하고 설명한 내용입니다.

강의 자료 제일 밑에 있는 글을 미리 보겠습니다.

간단한 설명을 위해 단일 특성에 대한 경사하강법에 중점을 두었습니다. 물론 경사하강법은 여러 개의 특성을 갖는 특성 세트에도 사용 가능합니다.

To simplify the explanation, we focused on gradient descent for a single feature. Rest assured that gradient descent also works on feature sets that contain multiple features.

특성이 여러 개 있을 때는 중복 데이터는 그냥 제거하면 되죠.

특성이 한 개 일때는 특히나 카테고리컬 데이터라면, 중복되는게 엄청 많아지겠죠.

이 내용은 추후에 실습을 하면서 직접 해봐야 잘 느껴질 것 같습니다.

여기까지의 내용은 결국배치크기가 너무 크면 안좋다!라는걸 말하고 있습니다.

배치 크기가 너무 크면 안좋다는 걸 알았습니다.

그러면 배치 크기를 조절해서 학습하는게 경사하강법 변형된 방식의 핵심이겠네요.

다음 내용을 보겠습니다.

만약에 훨씬 적은 계산으로 적절한 기울기를 얻을 수 있다면 어떨까요? 데이터 세트에서 예를 무작위로 선택하면 (노이즈는 있겠지만) 훨씬 적은 데이터 세트로 중요한 평균값을 추정할 수 있습니다.**확률적 경사하강법(SGD)**은 이 아이디어를 더욱 확장한 것으로서, 반복당 하나의 예(배치 크기 1)만을 사용합니다. 반복이 충분하면 SGD가 효과는 있지만 노이즈가 매우 심합니다. '확률적(Stochastic)'이라는 용어는 각 배치를 포함하는 하나의 예가 무작위로 선택된다는 것을 나타냅니다.

What if we could get the right gradient on average for much less computation? By choosing examples at random from our data set, we could estimate (albeit, noisily) a big average from a much smaller one.**Stochastic gradient descent (SGD)**takes this idea to the extreme--it uses only a single example (a batch size of 1) per iteration. Given enough iterations, SGD works but is very noisy. The term "stochastic" indicates that the one example comprising each batch is chosen at random.

특별히 어려운 내용은 없네요.

특징만 정리해 보겠습니다.

확률적 경사하강법(SGD, Stochastic Gradient Descent)

- gradient 를 구하는데 1개의 데이터만 사용(=배치 크기1)

- 데이터는 무작위로 선택(그래서 확률적이라는 단어가 붙음)

- 반복이 충분할 경우 효과 있음(=반복을 많이 해야함)

- 노이즈가 심함

- 각 반복마다 무작위로 선택

이것도 역시 추후에 실습으로 해보는게 제일 이해가 잘 될 것 같습니다.

그래도 조금 더 와닿게 하기 위해 GD 와 SGD 를 비교한 사진 하나 보고 가겠습니다.

사진2. SGD 와 GD 비교(출처:링크)

노이즈가 많아서 기울기가 최소값이 되는 구간까지 가는데 여러번 반복이 필요하지만, 계산이 빨라서 더 빨리 도착하겠네요.

일단은 이런게 있구나 하면서 넘어가도록 하겠습니다.

**미니 배치 확률적 경사하강법(미니 배치 SGD)**는 전체 배치 반복과 SGD 간의 절충안입니다. 미니 배치는 일반적으로 무작위로 선택한 10개에서 1,000개 사이의 예로 구성됩니다. 미니 배치 SGD는 SGD의 노이즈를 줄이면서도 전체 배치보다는 더 효율적입니다.

**Mini-batch stochastic gradient descent (mini-batch SGD)**is a compromise between full-batch iteration and SGD. A mini-batch is typically between 10 and 1,000 examples, chosen at random. Mini-batch SGD reduces the amount of noise in SGD but is still more efficient than full-batch.

1개는 너무 작은거 아니야? 했는데, 절충안이 있군요.

확률적 경사하강법(SGD)과의 차이점은 배치 크기가 더 크다는 점

미니 배치 SGD 는 어떻게 움직일지 한 번 상상해 보시고, 사진을 보시죠.

사진3. SGD 와 mini-batch SGD 비교(출처: 링크)

노이즈가 확률적 경사하강법(SGD) 보다는 많이 줄었네요.

마무리

특별히 어려운 내용은 없지만, 직접 해보지 않으면 잘 와닿지 않을 내용들이네요.

이번에는배치가 뭐고, 대략 어떤 변형된 방식들이 있구나라는 것만 얻어가면 되겠습니다.

파이썬 코드로 쉽게 GD 와 SGD 비교한 글이 있어서 링크 남겨둡니다.

Difference between Batch Gradient Descent and Stochastic Gradient Descent [WARNING: TOO EASY!]

계산은 Tensor Flow 에서 알아서 해주니 우리가 직접 구현 할 일은 없어서 참고해 보는 것도 좋겠습니다.

다음 강의인 실습을 하면서 조금 더 이해하시기 바랍니다.

실습 중에 에포크(Epochs) 가 나오는데 직감적으로 아셨을 겁니다.

누를 때 마다 올라가는 걸 보면, 반복 횟수라는걸 알아차리셨겠죠?

Stochastic gradient descent

・위 두식을 보면 single gradient descent와 full-batch gradient descent의 차이를 알 수 있는데, 

single gradient descent(왼쪽)은 트레이닝 값(x)을 하나 넣고 최저값을 찾아간다.

full-batch gradient descent(오른쪽)은 트레이닝값을 한번에 모두 이용하여 최저값을 찾아간다.

 

 

・gradient descent : 한번에 1개의 트레이닝 데이터만을 사용해 w값을 업데이트

・full-batch gradient descent : 전체의 트레이닝 데이트터를 한번에 이용해 w값을 업데이트

・앞에서 배웠던 내용은 모두 Full-batch gradient descent 였다.

**배치(batch)**

모델 학습의 반복 1회, 즉 경사 업데이트 1회에 사용되는 트레이닝 데이터의 집합입니다.

The set of examples used in one iteration (that is, one gradient update) of model training.

・n은 feature의 개수, m은 트레이닝 데이터의 개수를 의미하므로 WtXi는 모든 데이터 셋이다.

・모든 데이터에 관하여 한번에 wi의 값을 업데이트 하기 때문에 업데이트 횟수가 감소된다.

・local optmizion이 되는 단점이 존재한다. 예를 들어 3차 함수와 같은 경우에 최저값의 변곡점이 아닌 그보다 큰 변곡점의 값(local optmizion)을 반환할 수 도 있다.

・feature가 10개, 트레이닝 데이터가 3억개일 때, 총 30억개의 데이터 한번에 이용해서 업데이트를 시행하기 때문에 메모리가 부족한 문제 발생한다.

・X : 모든 트레이닝 데이터

・트레이닝 데이터를 랜덤으로 셔플

・트레이닝 데이터에서 하나하나를 빼내 feature w값을 업데이트 시킴 (gredient descent)

\*full-batch gradient descent에서는 모든 트레이닝 데이터를 한번에 이용해 w값을 업데이트

・총 데이터가 10000건 있다고 하면, full-batch는 10000

・batch-size : 한 번에 학습되는 데이터의 개수. batch-size를 100으로 가정

full-batch를 모두 실행하기 위해선 배치를 100번 돌려야함.

full-batch가 한번 돌면 1epoch이라함.

・hyper-parameter : 사람이 직접 선정해야하는 값. 러닝레이트 같은거

 

 

・하나의 트레이닝 데이터를 사용 : gradient descent

트레이닝 데이터 전체를 한번에 사용 : full-batch gradient descent

트레이닝 데이터 전체를 몇 개의 덩어리로 나누어서 사용 : mini-batch stochastic gradient descent

+ Recent posts