머신러닝에서의 랜덤성(Randomness in Machine Learning)

JONGWON
6 min readMay 9, 2021

--

유튜브의 ‘코딩하는 거니’ 채널에서 재미있는 동영상을 하나 발견했습니다.

랜덤넘버의 역사에 대한 상세한 이야기가 담겨있습니다.

또한, 영상에서 인상깊었던 점은 우리가 랜덤이라고 받아들이고 사용하는 숫자가 실제로 완벽한 랜덤은 아니라는 점에 있습니다.

[그래서 접미사로 Pseudo(가짜) -random 이라고 말합니다.]

그런데 동영상을 보고나니 문득 그런생각이 들었습니다.

  1. 빅데이터 분석(데이터 마이닝, 머신러닝, 딥러닝, 통계적 방법론 등) 에서 랜덤 난수를 사용하지 않는 알고리즘은 없다.
  2. 모든 머신러닝 알고리즘은 사실 가짜 숫자를 기반으로 이루어진 것이다.

그럼 정확하지 않고, 재생산성이 높은 데이터 분석을 할 수 있는것인가? 라는 생각이 들었습니다.

글의 요약

  1. 머신러닝에서는 같은 데이터라도 랜덤성에 의해 알고리즘의 학습 결과가 달라집니다.
  2. 머신러닝에서의 랜덤성은 대표적으로 데이터의 split & order 와 알고리즘, 샘플링 방법에 존재합니다.
  3. Seed값 설정으로 재생산 가능한 머신러닝 모델을 구축할 수 있습니다.
  4. 결과를 N번 반복하고 이를 평균, 분산, 구간 등으로 표기하라.
  5. 양자역학을 이용해 완벽한 난수를 생성하는 ‘양자 난수 발생기’가 있다.

난수에 대해 더 궁금하신 분은 아래의 영상을 확인해주세요. 😁

1. 머신러닝에서 랜덤성(Randomness)?

머신러닝에서는 모델이 원하는 Parameter를 추정하기 위해서 데이터를 활용합니다.

모델 학습에 적합하게 데이터를 변형 및 대입시키며 최적의 값을 찾아냅니다.

슈도 랜덤성은 이 과정에 전반적인 영향을 미칩니다.

여기서 슈도 랜덤모델 전반 이라는 점을 짚어봅시다.

슈도 랜덤은 그 랜덤성에 충분한 정당성을 부여받았습니다. 때문에 당연히 간과할 수 있습니다. 따라서 이 부분은 OK. 👌

문제는 랜덤성이 모델에 어디까지 개입되느냐 일 것입니다.

머신러닝에서는 모델을 돌릴때마다, 시드값에 따라, train/validation/test 를 나눔에 따라… 등 여러 상황에 따라 같은 데이터라도 랜덤성에 의해 알고리즘의 학습 결과가 달라집니다.

2. 머신러닝 알고리즘에서 랜덤성은 어디에 있을까?

1. 데이터 split

머신러닝에서는 데이터 학습을 위해 train/validation/test 를 나누는데 조각 나는 데이터의 경우의 수가 전부 다를것입니다.

데이터 학습 이전에서부터 랜덤성이 존재합니다.

2. 데이터 order

split과 마찬가지로 데이터의 order도 중요합니다.

NN(Neural Network)처럼 관측치의 순서가 모형에 큰 관여를 하는 알고리즘들이 존재하기에 모형을 돌리기전에 train 데이터를 충분히 섞을(Shuffle) 필요가 있습니다.

3. 알고리즘

NN의 가중치(weight)이나 K-means처럼 random state으로부터 출발하는 알고리즘들이 있습니다.

4. (Re) Sampling

100개의 샘플 중 10개를 택하는 방법은 여러가지입니다.

이처럼, sampling에서 랜덤성이 발생할 수 있습니다. 또한, Bootstrap과 같은 Re-sampling method에서도 마찬가지입니다.

Photo by Paul Wong on Unsplash

3. 랜덤을 해결하기 위한 방법은?

머신러닝 모델이 내놓은 결과는 불안정한 결과라고 볼 수 있을까요? 재생산 가능해야 하지 않을까요?

이를 위해서 Random Seed를 설정해야 합니다.

Random Seed를 설정함으로써, 고정된 랜덤값을 얻을 수 있습니다. 때문에, 같은 결과를 반복해서 확인할 수 있게 됩니다.

모델을 활용해 결과 재현(=시연), 설득, 보고서 작성… 등의 용으로 활용될 수 있다는 뜻입니다.

하지만 여전히 무슨 seed값이 최선일지, 정말 이 마법의 숫자 하나면 모델의 랜덤성은 다잡을 수 있는것인지 걱정스러울 것입니다.

4. 랜덤을 대하는 우리들의 자세

Re-sampling은 여러번의 샘플링을 무수히 반복해 결과 값의 안정을 꾀하는 철학을 가지고 있습니다.

예를들어 K-fold Cross Validation에서는 K번의 집계 값을 가지고 와 수치를 안정시킵니다.

머신러닝 모형에서도 이와 같은 방식으로 불확실함을 해소할 필요가 있습니다.

“결과를 N번 반복하고 이를 평균, 분산, 구간 등으로 표기하라.”

사실 K-fold 알고리즘을 사용하고 있다면, 이미 랜덤성은 해소된 것이나 마찬가지입니다.

또한, 제시되는 결과를 단순 수치가 아닌 구간으로 제시해 랜덤성을 알릴 필요가 있습니다. 대부분의 결과는 대부분 가우시안 분포를 따를테니 신뢰구간 만드는것 쯤이야 어렵지 않습니다.

GLM이나 앙상블 모형을 활용해 결과로 제시하는것 또한 좋은 선택지가 될 것입니다. 하지만 이는 어디까지나 도메인, 분석가 나름일것이니 판단은 자기의 몫일 것입니다. 😅

5. 완벽한 랜덤성

Photo by Michael Dziedzic on Unsplash

구글에서 양자컴퓨팅이 제안되고, 국내에서도 이와 관련한 활발한 연구들이 진행되고 있습니다.

그 중 양자역학을 이용해 완벽한 난수를 생성하는 방법이 있다고 합니다.

바로 양자 난수 발생기로, 국제표준 [ITU-T X.1702 (Quantum noise random number generator architecture (11/2019))] 으로 등록 되어 있습니다.

방사성동위원소나 빛을 이용해 랜덤한 난수를 생성한다고 합니다.

언젠가는 머신러닝에서도 이런 완벽한 난수를 이용해 모형을 학습 시키는 날이 올지도 모르겠습니다.

긴 글 읽어주셔서 감사합니다.

참고

[1] https://machinelearningmastery.com/randomness-in-machine-learning/

[2] https://terms.naver.com/entry.naver?docId=6023921&cid=42346&categoryId=42346

[3] https://terms.naver.com/entry.naver?docId=3580434&cid=58944&categoryId=58970

--

--

JONGWON
JONGWON

Written by JONGWON

Interested in solving buisness problem with bigdata analysis

No responses yet