본문 바로가기

좋아하는 것_매직IT/24.tensorflow

15.tensorflow, 난수(Random)에 대해서 알아보자.

반응형

블로그 목적

  • 머신러닝 학습 알고리즘에서 사용할 난수에 대한 지식을 얻는 것이 목적이다.

난수(Random)에 대해서 알아보자.

  • 난수는 PRNG(Pseudo Random Number Generator, 의사 난수 생성기)를 통해서 생성됨.
    • 즉, 논리적으로 계산된 수를 생성해냄.
  • 그리고, 텐서플로는 PRNG를 이용해 임의의 분포를 갖는 난수 텐서를 생성해냄.

그럼, 균일분포에 대해서 알아보자.

  • 균일분포(Uniform Distribution)란?
    • 주어진 범위 내의 모든 수가 동일한 분포를 갖는 형태를 말함.
  • 균일 분포 함수
  • 그럼, 텐서플로로 샘플코드를 작성해 보자.
    • 1차원텐서 / 100개의 값이 0~1사이의 균일분포되도록 작성함.
      • 실행화면
        •  설명
          • 위의 그림에서, 0~1사이의 값이 거의 같은 확률로 분포한다고 볼 수 있음.

그럼, 정규분포에 대해서 알아보자.

  • 정규분포(Normal Distribution) 란?
    • 정규 분포(Normal Distribution, 正規分布)는 연속 확률 분포 중 하나임.

      • 가우스가 처음 정립했기 때문에 가우스 분포(Gaussian Distribution)라고도 함.

      • 인간과 자연세상에서 일어나는 수많은 일을 설명하는 핵심 개념이며, 통계학에서 사용하는 각종 확률 분포 중에서도 가장 중요하게 다루는 분포이다. 일명 통계학의 꽃이라고 함.;;

        • 만약 0 에서 가까운 값을 더 많이 갖게 되는 난수를 분포 시켜야 할 경우 가우시안분포 or 정규분포를 사용함.
          • 다시말해서, 0에서 멀리 있는 값일수록 발생할 확률이 급격히 낮아진다고 볼 수 있음.
  • 정규분포 함수
  • 그럼, 텐서플로로 샘플코드를 작성해 보자.
      • 1차원 텐서 / 크기가 100이고, 평균값이 0, 표준편차가 3인 정규분포를 따르도록 작성함. 

    • 실행화면
      • 설명
        •  0 에서 가까운 값을 더 많이 갖게 되는 난수의 분포를 볼 수 있음.

그럼, 시드(seed) 를 이용한 난수 생성에 대해서 알아보자.

  • 의사난수는 알고리즘의 초기값, 즉 시드(seed)값에 따라 항상 동일한 난수를 생성해 낼 수 있음.
    • 다시말해서, 시드값을 고정해서 사용하면, 매번 동일한 난수가 생성됨.
    • 보통, 재현이 필요한 프로그램 디버깅과정에서 유용하게 사용할 수 있음.
  • 그럼, 시드를 이용해서 난수 생성을 하는 코드를 작성해보자.
    • 예시 / 실행화면
      • 처음 실행 했을 때 (88)
      •  다시한번 실행 했을 때(89)...(역시나 같음...^^;)
          •  설명
            • 88번째/89번째 난수 결과 값이 동일함을 확인할 수 있음.

마지막으로, 몬테카를로방법에 대해서 알아보자.

  • 몬테카를로 방법(Montecarlo's method) 이란?
  • 그럼, 예제코드를 작성해 보자.
    • 예시 / 실행화면
        • 설명
          • 몬테카를로 기법을 통해서 원주율[π]로 출력값이 수렴하는 과정을 나타냄.

결론

  • 난수는 PRNG(Pseudo Random Number Generator, 의사 난수 생성기)를 통해서 생성됨.
    • 즉, 논리적으로 계산된 수를 생성해냄.
  • 그리고, 텐서플로는 PRNG를 이용해 임의의 분포를 갖는 난수 텐서를 생성해냄.
  • 이제까지, 균일분포/정규분포/시드를 사용한 난수생성/몬테카를로방법에 대해서 알아봄.
  • 오늘도 난수에 대한 지식한가지 획득완료! 감사합니다.
728x90
300x250