반응형

출처: https://medium.com/@kmkgabia/ml-sigmoid-%EB%8C%80%EC%8B%A0-relu-%EC%83%81%ED%99%A9%EC%97%90-%EB%A7%9E%EB%8A%94-%ED%99%9C%EC%84%B1%ED%99%94-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-c65f620ad6fd

training 데이터 셋으로 학습시킨 모델을 이용해 test 데이터 셋으로 테스트를 한다는 건 교과서로 공부한 후 실전 문제로 시험을 보는 것과 같다. 여러 번에 걸쳐 training 시킨 후 학습 결과를 확인하기 위해 test하는 작업을 반복해야 한다.

보통 트레이닝 셋과 테스트 셋은 완전히 구분되어 있다. training data set은 다시 2가지로 구성되기도 하는데, 실제 train을 위한 약 70%의 training data set과 validation 체크를 위한 약 30%의 validation data set이다. 시험으로 치면 validation은 모의고사라고 할 수 있다.

Online Learning
dataset이 굉장히 많은 경우 한번에 넣어서 학습 시키기 어려울 때가 있다. 이럴 때는 online Learning 이라는 형태의 학습 방법을 이용한다.

training set이 예를 들어 100만개가 있다고 가정해보자. 이를 10만개씩 나눠서 학습시킬 수 있는데 이 때 모델은 이전에 학습시킨 10만개의 데이터가 남긴 학습 결과가 다음에 학습시킬 10만개의 데이터에 반영될 수 있도록 해야 한다. 이런 학습 방법을 online learning 이라고 한다.

 

반응형
반응형

출처:https://medium.com/@kmkgabia/ml-sigmoid-%EB%8C%80%EC%8B%A0-relu-%EC%83%81%ED%99%A9%EC%97%90-%EB%A7%9E%EB%8A%94-%ED%99%9C%EC%84%B1%ED%99%94-%ED%95%A8%EC%88%98-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-c65f620ad6fd

 

Sigmoid 함수는 binary classification 에 적절함 함수다. 일정 값을 기준으로 0인지 1인지구분함으로써 분류하는 방식이다. 딥러닝에서는 특정 임계치를 넘을 때만 활성화되기 때문에 activation function 중의 하나로 구분되는 함수다.

보통 처음은 input layer, 마지막은 output layer 라고 하는데, 이 가운데 보이지 않는 부분은 hidden layer로 칭한다. 실제로 9개의 hidden layer 가 있다고 했을 때 Tensorflow에 돌려 보면 정확도가 0.5밖에 안되는.. 1개 hidden layer일때 보다도 못한 결과가 나오게 된다. 왜 이런 문제가 발생할까?

  • backpropagation(1986): 2단 3단 정도의 레이어는 학습이 잘 되나, 9단, 10단으로 넘어가면서 부터는 학습이 제대로 이루어 지지 않는 이유는, 역전파 방식에 있다고 볼 수 있다. 레이어가 많을 경우 각각의 단계의 값을 미분해서 최초 레이어까지 결과 값을 전달해가게 되는데, 만약 내부의 hidden layer들이 모두 sigmoid 함수로 이루어져 있다면 각 단계에서 계산한 값은 모두 0과 1 사이의 값일 수밖에 없다.
  • Vanishing Gradient: 따라서 여러 레이어를 갖고 있을 때, 최초 입력 값은 각각의 레이어에서 나온 값들을 곱해준 만큼의 결과에 영향을 주는 것이므로 최종 미분값은 결국 0에 가까운 값이 될 수 밖에 없다. 이를 경사도(기울기)가 사라지는 현상으로 본다. 최초 입력 값이 최종 결과 값에 별로 영향을 끼치지 않는다는 결론으로 수렴하게 되는 것이다.

sigmoid 함수는 0<n<1 사이의 값만 다루므로 국 chain rule을 이용해 계속 값을 곱해나간다고 했을 때 결과 값이 0에 수렴할 수 밖에 없다는 한계를 가지고 있으므로, 나중에는 1보다 작아지지 않게 하기 위한 대안으로 ReLU라는 함수를 적용하게 된다.

ReLU

이후 내부 hidden layer를 활성화 시키는 함수로 sigmoid를 사용하지 않고 ReLU라는 활성화 함수를 사용하게 되는데, 이 함수는 쉽게 말해 0보다 작은 값이 나온 경우 0을 반환하고, 0보다 큰 값이 나온 경우 그 값을 그대로 반환하는 함수다. 0보다 큰 값일 경우 1을 반환하는 sigmoid와 다르다. 따라서 내부 hidden layer에는 ReLU를 적용하고, 마지막 output layer에서만 sigmoid 함수를 적용하면 이전에 비해 정확도가 훨씬 올라가게 된다.

sigmoid 와 relu 외에도 여러가지 활성화 함수가 있다.

반응형
반응형

출처: https://blog.naver.com/qbxlvnf11/221449595336

결론부터 말하자면 batch size와 성능의 상관 관계는 아직 정확하게 규정되지는 않았습니다.

task, 데이터에 따라 그 기준이 달라지기 때문입니다.

다만, 일반적으로 32, 64 크기의 mini-batch가 성능에는 가장 좋다고 알려져 있습니다.

batch size를 줄이거나 늘임으로써 얻는 장점을 요약하자면 다음과 같습니다.

▶ batch size를 줄임으로써 얻는 장점

- 필요한 메모리 감소: 전체 데이터를 쪼개어 여러 번 학습하는 것이기 때문에 최소 요구 메모리량을 줄일 수 있음.

▶ batch size를 늘임으로써 얻는 장점

- 아래 graph를 보면 전체 데이터를 활용한 Batch의 경우(파란색 그래프)보다 batch size가 작은 Mni-batch의 경우(초록색 그래프)가 더 fluctuate 한 것을 확인할 수 있음.

(더 flucatuate 하다는 것은 학습이 불안정 해진다는 의미)

▶ 정리

가용 메모리가 적을 때는 batch size를 상대적으로 작게,

보다 안정적으로 학습을 시키고 싶다면 batch size를 상대적으로 높게 설정해주면 됩니다.

다만, 아래 논문 정리글에서도 확인할 수 있듯이

batch size가 커질 수록 일반화 성능은 감소하는 경우가 다소 확인이 되었으니 그 점만 유의해주시면 되겠습니다.

[출처] 머신 러닝 - batch size 적절하게 조절하기|작성자 예비개발자

반응형
반응형

출처: https://m.blog.naver.com/qbxlvnf11/221449297033

 

이번 포스팅의 주제는 텐서플로우나 케라스 등을 사용해서 모델을 만들어 보았으면 다들 아실 용어인 epoch와 batch size 그리고 iteration입니다.


▶ 알고리즘이 iterative 하다는 것: gradient descent와 같이 결과를 내기 위해서 여러 번의 최적화 과정을 거쳐야 되는 알고리즘

optimization 과정

▶ 다루어야 할 데이터가 너무 많기도 하고(메모리가 부족하기도 하고) 한 번의 계산으로 최적화된 값을 찾는 것은 힘듭니다. 따라서, 머신 러닝에서 최적화(optimization)를 할 때는 일반적으로 여러 번 학습 과정을 거칩니다. 또한, 한 번의 학습 과정 역시 사용하는 데이터를 나누는 방식으로 세분화 시킵니다.

이때, epoch, batch size, iteration라는 개념이 필요합니다.


 

- epoch

One Epoch is when an ENTIRE dataset is passed forward and backward through the neural network only ONCE

(한 번의 epoch는 인공 신경망에서 전체 데이터 셋에 대해 forward pass/backward pass 과정을 거친 것을 말함. 즉, 전체 데이터 셋에 대해 한 번 학습을 완료한 상태)

▶ 신경망에서 사용되는 역전파 알고리즘(backpropagation algorithm)은 파라미터를 사용하여 입력부터 출력까지의 각 계층의 weight를 계산하는 과정을 거치는 순방향 패스(forward pass), forward pass를 반대로 거슬러 올라가며 다시 한 번 계산 과정을 거처 기존의 weight를 수정하는 역방향 패스(backward pass)로 나뉩니다. 이 전체 데이터 셋에 대해 해당 과정(forward pass + backward pass)이 완료되면 한 번의 epoch가 진행됐다고 볼 수 있습니다.

역전파 알고리즘이 무엇인지 잘 모른다고 하더라도 epoch를 전체 데이터 셋에 대해 한 번의 학습 과정이 완료됐다고 단편적으로 이해하셔도 모델을 학습 시키는 데는 무리가 없습니다.

epochs = 40이라면 전체 데이터를 40번 사용해서 학습을 거치는 것입니다.

▶ 우리는 모델을 만들 때 적절한 epoch 값을 설정해야만 underfitting과 overfitting을 방지할 수 있습니다.

epoch 값이 너무 작다면 underfitting이 너무 크다면 overfitting이 발생할 확률이 높은 것이죠.


- batch size

Total number of training examples present in a single batch.

- iteration

The number of passes to complete one epoch.

batch size는 한 번의 batch마다 주는 데이터 샘플의 size. 여기서 batch(보통 mini-batch라고 표현)는 나눠진 데이터 셋을 뜻하며 iteration는 epoch를 나누어서 실행하는 횟수라고 생각하면 됨.

▶ 메모리의 한계와 속도 저하 때문에 대부분의 경우에는 한 번의 epoch에서 모든 데이터를 한꺼번에 집어넣을 수는 없습니다. 그래서 데이터를 나누어서 주게 되는데 이때 몇 번 나누어서 주는가를 iteration, 각 iteration마다 주는 데이터 사이즈를 batch size라고 합니다.


출처: https://www.slideshare.net/w0ong/ss-82372826

- 정리

전체 2000 개의 데이터가 있고, epochs = 20, batch_size = 500이라고 가정합시다.

그렇다면 1 epoch는 각 데이터의 size가 500인 batch가 들어간 네 번의 iteration으로 나누어집니다.

그리고 전체 데이터셋에 대해서는 20 번의 학습이 이루어졌으며, iteration 기준으로 보자면 총 80 번의 학습이 이루어진 것입니다.

반응형

+ Recent posts