엔트로피(Entropy)는 정보이론의 가장 핵심 내용이다. 
  • 정의
     엔트로피란 무작위 사건의 결과 또는 r.v.에 대한 불확실성을 포함하는 정보의 양을 의미한다. 
    예를들어, 동전던지기와 육면체 주사위 던지기 결과로 비교해보면 육면체 주사위를 던지는 경우가 엔트로피가 더 크다. 
    즉, 엔트로피가 높을수록 불확실성이 커지게 된다. 이와 반대로 어떠한 계에서의 정보량은 불확실성의 정도이므로 불확실성이 적은 계의 정보 엔트로피는 줄어들 수 있다. 


  • Self-information
     Self-information이란 확률 $p$를 가지는 사건(혹은 메세지) $A$의 정보를 의미한다. 
    어떤 메세지 $m$에 대한 self-information은 다음과 같이 정의된다. 

    $$I(m)=\log\Big(\frac{1}{p(m)}\Big)=-\log p(m) [bit]$$

    식에 따라 정보량은 확률의 $log$ 값을 나타내는데, 확률은 0~1 사이의 값이므로 이를 정보량을 양수로 표현하기 위해 $(-)$를 붙여서 양수로 만들어준다. 


  • Entropy
    Self-information이 하나의 메세지에 대한 자기 자신의 정보량을 의미한다면, 엔트로피란 다수의 메세지($M$)에 대한 각각의 정보량의 평균값을 의미한다. 
    평균값을 계산하는 방식은 $M$의 사건들이 discrete한 경우와 continuous한 경우에 따라 각각 다음과 같이 정의 된다. 

        - Discrete
    $$ \begin{aligned}H(E)&=E[I(M)] \\ &=\sum_{m\in M}p(m)I(m) \\ &=-\sum_{m\in M}p(m)\log p (m) \end{aligned}$$

        - Continuous
    $$ \begin{aligned} H(X)&=E(x) \\ &=\int p(x)I(x) \\ &=-\int p(x) \log\big( p(x) \big)   \end{aligned}$$

    이 때, 어떤 메세지 공간 $M$에 대해서 각 사건들이 uniform distribution이 되는 경우 엔트로피 값이 최대가 된다. 즉, 각 사건의 확률 $p(m)$이 모두 동일할 경우 엔트로피가 최대가 된다. 


쿨백-라이블러 발산 (Kullback-Leibler divergence, KL-divergence)

  • 두 개의 확률분포의 차이를 계산하는데 사용하는 함수이다. 
  • 어떤 이상적인 분포에 대해 그 분포를 근사하는 다른 분포를 이용해서 샘플링을 했을때 발생할 수 있는 엔트로피의 차이를 계산한다. 
  • 상대 엔트로피 (relative entropy), 정보 획득량 (information gain) 혹은 정보 발산 (information divergence)라고도 한다. 
  • KL-divergence는 비대칭으로, 두 값의 위치를 바꾸면 함수값도 달라진다. 따라서 거리 함수가 아니다. 

 

정의

Cross entropy를 계산하는 수식으로부터 KL-divergenc를 다음과 같이 유도할 수 있다. 

 

$$ \begin{aligned} H(p,q) & = -\sum_i p_i \log q_i \\ & = -\sum_i p_i \log q_i -\sum_i p_i \log p_i + \sum_i p_i \log p_i \\ & = \color{blue}{H(p)} + \sum_i p_i \log p_i - \sum_i p_i \log q_i \\ & = \color{blue}{H(p)} + \color{red}{\sum_i p_i \log \frac{p_i}{q_i}} \\ & =\color{blue}{H(p)}+\color{red}{KL(p||q)}   \end{aligned} $$

 

즉, $p$의 엔트로피에 $ \color{red}{\sum_i p_i \log \frac{p_i}{q_i} }$가 더해진 것이 Cross entropy를 의미합니다.

그리고 이 때 더해지는 텀이 바로 $p$의 분포와 $q$의 분포의 정보량의 차이를 (KL-divergence)를 의미합니다. 

 

다시 한 번 정리하면, KL-divergence는 $p$와 $q$의 cross entropy에서 $p$의 엔트로피를 뺀 값이 됩니다. 

이를 식으로 표현하면 다음과 같습니다. 

$$KL(p||q)=H(p,q)-H(p)$$

 

따라서 cross entropy를 최소화(minimize)하는 것은 결과적으로 KL-divergence를 최소화 하는 것과 동일합니다. 

($H(p)$는 고정된 하나의 상수값이기 때문에)

 

 

특징

  • $KL(p||q) \geq 0$
  • $KL(p||q) \neq KL(q||p)$
    $ \begin{aligned} KL(p||q) & =H(p,q)-H(p) \\ & \neq H(q,p) -H(q) = KL(q||p) \end{aligned}$
  • KL-divergence는 어떠한 확률 분포 $P$가 있을때, 샘플링 과정에서 그 분포를 근사적으로 표현하는 확률분포 $Q$를 $P$대신 사용할 경우 엔트로피 변화를 의미한다. 

1. 주피터 노트북 기본 경로 설정

주피터 노트북을 설치하고 실행 시 기본 경로가 일반적이지 않다. 

기본 경로가 잘못됬다는 의미는 아니고, 해당 경로에 수많은 폴더가 뒤죽박죽 섞여 있기 때문에 폴더나 파일을 관리하는데 쉽지 않다. 

따라서 이러한 기본 경로를 수정함으로써 관리를 수월하게 할 수 있다. 

 

아나콘다 프롬프트에서 config 파일 생성을 위해 다음과 같은 코드를 입력한다. 

 

jupyter notebook --generate-config

 

1) 올바르게 생성이 된다면 config파일의 생성 위치가 출력된다. 

2) 해당 위치에 가서 config 파일을 VScode나 메모장을 이용해서 연다. 

3) Ctrl+F 를 눌러서 'c.NotebookApp.notebook_dir' 라인을 찾는다. 

4) 해당 라인 부분의 #을 제거하여 주석 처리를 없애주고 작은 따옴표 사이에 원하는 기본 경로를 작성한다. 

  e.g., 만약 D드라이브의 jupyter_notebook 폴더를 기본 경로로 설정하고 싶다면 해당 라인을 다음과 같이 수정한다. 

  c.NotebookApp.notebook_dir='D:\jupyter_notebook'

5). config 파일을 저장 후 다시 jupyter notebook을 실행시키면 변경된 기본 경로로 실행이 된다. 

 

 

2. 주피터 노트북 테마 변경

pip install jupyterthemes
jt -l 
jt -t onedork
jt -t onedork -f bitstream -T -N -fs 12 -nf opensans -nfs 10

-t onedork : onedork  테마 선택

-f bitstream :코드 폰트를 bitstream으로 변경

-T -N : 툴바와 제목을 보이게 설정

-fs 12 : 폰트 사이즈 12

-nf opensans : 주피터노트북 폰트를 opensans로 설정

-nfs 10 : 주피터 노트북 폰트 사이즈를 10으로 설정 

 

 

 

그래픽카드 : GTX 1060Ti 3GB 

CUDA : 10.1

cuDNN: Download cuDNN v8.0.5 (November 9th, 2020), for CUDA 10.1

PyTorch: Stable(1.7.1) + Windows10 + Conda + Python + CUDA 10.1

 

 

 

 

 

cuDNN 압축해제 후 해당 폴더 내에 있는 모든 파일을 복사 

 

  

복사한 모든 파일을 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1 에 붙여넣기

 

 

맨 아래 환경변수 선택

 

시스템 변수 > 'Path' 선택 후 > '편집' 선택

 

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\libnvpp  

등록 여부 확인

 

 본인은 Window10 그리고 아나콘다, 파이썬 그리고  CUDA 는 10.1 버전을 사용하고 있으므로 다음과 같이 선택한다. 

아래의 Run this Command 란에 나타나 있는

conda install pytorch torchvision torchaudio cudatoolkit=10.1 -c pytorch

명령어를 아나콘다 프롬프트를 통해 실행시켜 준다. 

 

 

Installation the TensorFlow(ver. GPU) based Windows 10


 텐서플로우는 CPU와 GPU를 이용하는 버전이 각각 있으며 CPU를 이용하는 버전은 이전 포스팅을 참고하시면 되겠습니다. 

이번 포스팅에서는 텐서플로우(TensorFlow) GPU 버전을 설치하는 방법을 알려드리겠습니다.



1. CUDA Toolkit 9.0 설치

텐서 플로우 GPU 버전을 설치하기에 앞서 CUDA Toolkit 9.0이 필요 합니다. 

주의할 점은 TensorFlow는 CUDA 9.0을 지원하기 때문에 이 점에 유의하셔서 올바른 버전을 설치하셔야 합니다. 

CUDA 9.0 다운로드 링크



윈도우의 경우 Installer Type이 network와 local 두가지 버전이 존재하는데, 이는 설치 파일을 여러번에 나누어 받는지(network), 혹은 한번에 받는지(local)에 따른 차이가 존재합니다. 

특별한 이유가 없다면 local 버전으로 다운받는게 낫습니다.



다운받으신 파일을 실행시키셔서 설치를 하면 됩니다. 


그런데! 그런데! 그런데!

만약 아래의 그림처럼 저와같은 문제가 발생하실수도 있습니다 ㅠㅠ 



프로그램 설치 실패가 떴다? 삽질 플래그가 떴습니다...

이래저래 찾아보니 저와 같은 문제를 겪은 사람들이 많더군요(관련링크)

기존에 그래픽 드라이버가 설치되어 있다면 아래의 그림과 설명에 따라 진행하시면 됩니다.


 

장치관리자 > 디스플레이 어댑터 > 장치 선택후 오른쪽 마우스 클릭 > 드라이버 업데이트 



컴퓨터에서 드라이버 소프트웨어 검색 > 컴퓨터의 사용가능한 드라이버 목록에서 직접 선택 > 기본 디스플레이 어댑터 선택한 뒤 설치 후 재부팅


재부팅 > 제어판 > 프로그램 및 기능(프로그램 추가/제어) > 기존에 설치한 CUDA 및 NVIDIA 드라이버를 찾아서 모두 삭제


드라이버를 모두 삭제하신 뒤에는 C:\Program Files(x86)과 Program Files폴더 내에 있는 NVIDIA Corporation 폴더를 모두 지워줍니다.




후... 여기까지 잘 진행하셨으면 삽질은 다 끝났습니다. 

그 뒤에 다시 재부팅 후 기존에 다운받으셨던 CUDA 파일을 실행시키신 후 다시 설치하시면 잘 될겁니다. 




2. cuDNN SDK(>=7.2) 설치



CUDA 9.0을 설치했으니 해당 버전으로 다운받으면 됩니다. 



다운받은 파일의 압축을 풀게되면 3개의 폴더가 존재하는데 이 파일들을 모두 아래의 경로에 복사해 줍니다.

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0



여기까지 무사히 진행되었으면 이제는 아나콘다를 이용해 텐서플로우를 설치할 차례입니다.




3. 아나콘다(Anaconda)를 이용한 TensorFlow 설치

아나콘다 설치 방법은 이전 포스팅에서 확인할 수 있습니다. 


#아나콘다를 이용해 가상환경을 cuda라는 이름으로 생성 합니다.

>conda create -n cuda pip python=3.6



#환경 활성화 작업을 진행

>activate cuda



#pip 업데이트 가능 여부 확인 후 업데이트 진행 

>python -m pip install --upgrade pip


#텐서 플로우 GPU버전 설치 

>pip install --ignore-installed--upgrade tensorflow-gpu


#주피터 노트북(Jupyter notebook)이 설치되어있지 않다면, 주피터도 설치

>pip install jupyter


#개발에 많이 사용되는 파이썬 라이브러리를 미리 설치해 놓는 것이 좋습니다. 아나콘다 콘솔에서 차트, 표, 이미지 처리 및 그래프 가시화를 위해 아래의 패키지들을 설치합니다. 

>pip install numpy matplotlib pandas pillow graphviz                                                       





Installation the Tensorflow with Anaconda based Windows 10


기본적으로 텐서플로우(tensorflow)는 리눅스 환경 기반에서 사용되지만 윈도우 환경에서도 사용이 가능합니다. 


텐서플로우는 GPU, CPU 두개의 버전이 있으며, 그 중 CPU 버전은 상대적으로 설치가 쉽고 간단한 예제의 실행이 가능하지만 복잡한 모델을 이용한 개발을 위해서는 반드시 GPU 버전을 설치해야 합니다. 


 공학용, 그리고 범용적으로 가장 인기있는 파이썬 배포판은 아나콘다(Anaconda) 입니다. 캐노피(Canopy)나 액티브파이썬(ActivePython)도 있지만 아나콘다가 가장 안정적이고 피드백이 빠른편입니다. 

 이번 포스팅에서는 아나콘다를 이용한 텐서플로우 CPU 버전의 설치 방법을 안내해드리도록 하겠습니다. 



1. 아나콘다(Anaconda) 설치 

아나콘다 5.3 버전부터 파이썬 3.7 버전을 사용하도록 바뀌었습니다(관련링크).

텐서플로우는 파이썬 3.7 버전의 패키지를 제공하지 않기 때문에 아나콘다 5.3 버전을 설치할경우 파이썬을 3.6 버전으로 다운그레이드 해야 합니다. 따라서 파이썬 3.6을 사용하는 아나콘다 5.2 버전을 설치하는 것이 심신건강에 좋습니다. 아나콘다 인스톨을 마치면 시작 버튼에서 아나콘다의 설치 폴더를 확인할 수 있습니다.



2.콘다 및 파이썬 패키지 업데이트

 Anaconda prompt를 실행시킨 후 콘다와 파이썬 패키지를 최신 버전으로 업데이트 합니다.

>conda update -n base conda

>conda update --all



3. Tensorflow (CPU 버전) 설치

 주로 사용할 아나콘다 가상환경을 tensorflow_cpu라는 이름으로 생성 합니다.

>conda create -n tensorflow_cpu python=3.6


만들어진 tensorflow_cpu 가상환경을 activate(활성화) 합니다.

>activate tensorflow_cpu


pip를 최신버전으로 업데이트 한 후에 pip 명령어를 이용하여 tensorflow(CPU버전)를 설치합니다.

>python -m pip install --upgrade pip

>pip install tensor flow



4. 파이썬 기타 라이브러리 설치

 개발에 많이 사용되는 파이썬 라이브러리를 미리 설치해 놓는 것이 좋습니다.

아나콘다 콘솔에서 차트, 표, 이미지 처리 및 그래프 가시화를 위해 아래의 패키지들을 설치합니다.

>pip install numpy matplotlib pandas pillow graphviz


+ Recent posts