반응형
블로그 목적
- 머신러닝 학습 알고리즘에서 사용할 난수에 대한 지식을 얻는 것이 목적이다.
난수(Random)에 대해서 알아보자.
- 난수는 PRNG(Pseudo Random Number Generator, 의사 난수 생성기)를 통해서 생성됨.
- 즉, 논리적으로 계산된 수를 생성해냄.
- 그리고, 텐서플로는 PRNG를 이용해 임의의 분포를 갖는 난수 텐서를 생성해냄.
그럼, 균일분포에 대해서 알아보자.
- 균일분포(Uniform Distribution)란?
- 주어진 범위 내의 모든 수가 동일한 분포를 갖는 형태를 말함.
- 균일 분포 함수
- tf.random.uniform( shape, minval=0, maxval=None, dtype=tf.dtypes.float32, seed=None, name=None )
- 참고페이지
- 그럼, 텐서플로로 샘플코드를 작성해 보자.
- 1차원텐서 / 100개의 값이 0~1사이의 균일분포되도록 작성함.
- 실행화면
-
- 설명
- 위의 그림에서, 0~1사이의 값이 거의 같은 확률로 분포한다고 볼 수 있음.
- 설명
- 1차원텐서 / 100개의 값이 0~1사이의 균일분포되도록 작성함.
그럼, 정규분포에 대해서 알아보자.
- 정규분포(Normal Distribution) 란?
-
정규 분포(Normal Distribution, 正規分布)는 연속 확률 분포 중 하나임.
-
가우스가 처음 정립했기 때문에 가우스 분포(Gaussian Distribution)라고도 함.
-
인간과 자연세상에서 일어나는 수많은 일을 설명하는 핵심 개념이며, 통계학에서 사용하는 각종 확률 분포 중에서도 가장 중요하게 다루는 분포이다. 일명 통계학의 꽃이라고 함.;;
- 만약 0 에서 가까운 값을 더 많이 갖게 되는 난수를 분포 시켜야 할 경우 가우시안분포 or 정규분포를 사용함.
- 다시말해서, 0에서 멀리 있는 값일수록 발생할 확률이 급격히 낮아진다고 볼 수 있음.
- 만약 0 에서 가까운 값을 더 많이 갖게 되는 난수를 분포 시켜야 할 경우 가우시안분포 or 정규분포를 사용함.
-
- 정규분포 함수
- 코드
- tf.random.normal( shape, mean=0.0, stddev=1.0, dtype=tf.dtypes.float32, seed=None, name=None )
- 참고페이지
- 코드
- 그럼, 텐서플로로 샘플코드를 작성해 보자.
- 1차원 텐서 / 크기가 100이고, 평균값이 0, 표준편차가 3인 정규분포를 따르도록 작성함.
- 실행화면
-
- 설명
- 0 에서 가까운 값을 더 많이 갖게 되는 난수의 분포를 볼 수 있음.
- 설명
그럼, 시드(seed) 를 이용한 난수 생성에 대해서 알아보자.
- 의사난수는 알고리즘의 초기값, 즉 시드(seed)값에 따라 항상 동일한 난수를 생성해 낼 수 있음.
- 다시말해서, 시드값을 고정해서 사용하면, 매번 동일한 난수가 생성됨.
- 보통, 재현이 필요한 프로그램 디버깅과정에서 유용하게 사용할 수 있음.
- 그럼, 시드를 이용해서 난수 생성을 하는 코드를 작성해보자.
- 예시 / 실행화면
- 처음 실행 했을 때 (88)
- 다시한번 실행 했을 때(89)...(역시나 같음...^^;)
-
- 설명
- 88번째/89번째 난수 결과 값이 동일함을 확인할 수 있음.
- 설명
-
- 처음 실행 했을 때 (88)
- 예시 / 실행화면
마지막으로, 몬테카를로방법에 대해서 알아보자.
- 몬테카를로 방법(Montecarlo's method) 이란?
- 그럼, 예제코드를 작성해 보자.
- 예시 / 실행화면
-
- 설명
- 몬테카를로 기법을 통해서 원주율[π]로 출력값이 수렴하는 과정을 나타냄.
- 설명
-
- 예시 / 실행화면
결론
- 난수는 PRNG(Pseudo Random Number Generator, 의사 난수 생성기)를 통해서 생성됨.
- 즉, 논리적으로 계산된 수를 생성해냄.
- 그리고, 텐서플로는 PRNG를 이용해 임의의 분포를 갖는 난수 텐서를 생성해냄.
- 이제까지, 균일분포/정규분포/시드를 사용한 난수생성/몬테카를로방법에 대해서 알아봄.
- 오늘도 난수에 대한 지식한가지 획득완료! 감사합니다.
728x90
300x250
'좋아하는 것_매직IT > 24.tensorflow' 카테고리의 다른 글
16.tensorflow, 구글 코랩(Google Colab) 에 대해서 알아보자. (0) | 2021.01.01 |
---|---|
14.tensorflow, 쥘리아 집합(Julia set)에 대해서 알아보자. (0) | 2020.12.31 |
13.tensorflow, 프랙탈(fractal)에 대해서 알아보자. (0) | 2020.12.31 |
12.tensorflow, 텐서(Tensor)에 대해서 알아보자. (0) | 2020.12.31 |
11.tensorflow, 텐서보드(TensorBoard) 에 대해서 알아보자. (0) | 2020.12.31 |