활성화 함수(Activation Function)

활성화함수는 입력값이 특정 뉴런에서 처리되어 결과값을 생성할때 적용되는 함수입니다. 활성화 함수로 이 글에서는 3가지를 언급하는데 첫째는 계단함수, 둘째는 시그모이드 함수, 셋째는 ReLU 함수입니다. 각 활성화 함수의 수식과 그래프를 살펴보면 다음과 같습니다.

시그모이드 함수(Sigmoid Function)

    $$h(x)=\frac{1}{1+e^{-x}}$$

위의 식을 그래프로 시각화하기 위한 코드는 아래와 같습니다.

import numpy as np
import matplotlib.pylab as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.arange(-10.0, 10, 0.1)
y = sigmoid(x)

plt.plot(x, y)
plt.show()

결과 그래프는 아래와 같습니다.

계단함수(Step Function)

    $$h(x)=\begin{cases}     0  & \quad (x \leq 0)\\     1  & \quad (x > 0)   \end{cases}$$

위의 식을 그래프로 시각화하기 위한 코드는 아래와 같습니다.

import numpy as np
import matplotlib.pylab as plt

def step(x):
    return np.array(x > 0, dtype=np.int)

x = np.arange(-10.0, 10, 0.1)
y = step(x)

plt.plot(x, y)
plt.show()

결과 그래프는 아래와 같습니다.

ReLU

    $$h(x)=\begin{cases}     0  & \quad (x \leq 0)\\     x  & \quad (x > 0)   \end{cases}$$

위의 식을 그래프로 시각화하기 위한 코드는 아래와 같습니다.

import numpy as np
import matplotlib.pylab as plt

def ReLU(x):
    return np.maximum(0, x)

x = np.arange(-10.0, 10, 0.1)
y = ReLU(x)

plt.plot(x, y)
plt.show()

결과 그래프는 아래와 같습니다.

Softmax

모델의 마지막 구성인 출력층에서 입력 데이터가 어떤 클래스로 분류되는지에 대한 확률값으로써 사용되는 활성화 함수로 식은 다음과 같습니다.

    $$y_{k}=\frac{\exp(a_{k})}{\displaystyle\sum_{i=1}^{n} {\exp(a_{i})}}$$

결과적으로 각 출력값들의 합은 1로써 각 출력값을 확률로 해석할 수 있습니다.

쌍곡탄젠트(Hyperbolic Tangent)

활성화 함수로 사용되는 신경망은 대표적으로 RNN입니다. RNN은 순환신경망(Recurrent Network Network)입니다. 수식은 아래와 같습니다.

    $$tanh(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}$$

그래프로 그려보면 다음과 같습니다.

신경망에서의 활성화함수는 각 뉴런계층의 값을 그 다음 뉴런계층으로 전달할때 비선형성을 부여해주게 됩니다. 즉, 활성화함수는 반드시 비선형홤수여야 하며 손실값의 최소화를 위한 경사하강법을 위해 반드시 미분 가능한 함수여야 합니다.

아나콘다(Anaconda) 설치

만약 기존에 Python이 설치되어 있다면 Uninstall(설치 디렉토리 안의 추가로 설치한 패키지는 남아 있으므로 직접 삭제 해야함)하고 관련된 시스템 속성에서 Path를 제거한다. 그리고 Anaconda 사이트에서 설치본을 다운로드 받아 설치한다. 별도의 사용자 설정없이 모두 Next로 설치를 진행하고 Path를 아래처럼 추가한다. (4개 추가했음)

폴더를 하나 만들고, 명령창에서 해당 폴더로 이동한 후 다음처럼 입력한다.

jupyter notebook

해당 폴더에서 웹으로 다양한 파이선 코드를 테스트해볼 수 있게 된다.

Windows에 PyTorch 설치

대부분 아나콘다를 통해 설치를 권장하는데, 이미 파이썬 3.7이 설치되어 있는지라, 혹시나하여 아나콘다가 아닌 그냥 설치하는 방식으로 진행했습니다.

Python 3.7 설치

Python 사이트에서 해당 버전 설치 파일로 설치.

CUDA 설치

https://developer.nvidia.com/cuda-toolkit에서 최신버전(10.1)을 설치하였음.

cuDNN 설치

구글에서 cuDNN으로 검색하여 developer.nvidia.com에서 로그인하여 압축 파일을 다운로드 받고 CUDA가 설치된 경로에 복사.

파란색 부분이 cuDNN에 해당됨.

PyTorch 라이브러리 설치

https://pytorch.org/get-started/locally를 참고하여 pip3로 설치함.

위의 이미지를 보면 pip3 명령어를 이용해 cmd 창에서 설치가 이루어지는데, pip3는 별도 설치를 요할 수 있습니다.

웹 GIS 클라이언트 엔진, FingerEyes-Xr

FingerEyes-Xr은 웹에서 지도를 표시하고, 표시된 지도와 연관된 기능을 제공할 수 있는 맵 컴포넌트입니다. GitHub에 소스가 공개되어 있으며, 다양한 GIS 시스템 개발을 위한 핵심 맵 컴포넌트로 활용되었고 웹 GIS 솔루션, NexGen에서도 지도 표출 및 다양한 지도 관련 기능을 위한 컴포넌트입니다.

FingerEyes-Xr은 완전한 웹 표준 기술만을 사용하였고, 모든 웹브라우저에서 구현된 표준 기술만을 사용하여 IE, Chrome, Safari, Firefox 등 거의 대부분의 브라우저에서 실행될 수 있습니다. FingerEyes-Xr은 이미 정해진, 구체적인 기능 개발을 지원하는 기반 컴포넌트인데, FingerEyes-Xr에서 지원하는 기능과 이 컴포넌트를 사용해 개발이 가능한 주요 기능은 다음과 같습니다.

먼저 핑거아이즈엑스알(FingerEyes-Xr)은 OGC 표준인 WFS, WMS 방식의 지도를 표시하여 활용할 수 있고, 항공영상을 TMS 방식 등을 통해 배경지도로 활용할 수 있습니다. 그리고 지도 위에 다양한 그래픽 요소를 매쉬업할 수 있는데, 표현할 수 있는 그래픽 요소에는 Marker, Polyline, Polygon, Box, Circle, Ellipse, Text, Image가 있고, 속성 데이터에 기반하여 복합적인 그래픽 요소를 공간 데이터의 차원으로 자유롭게 구성할 수 있는데, 이에 대한 자세한 내용은 아래 글을 참조하시기 바랍니다.

FingerEyes-Xr, 공간 데이터에 대한 Custom Draw (사용자 정의 그리기)

FingerEyes-Xr은 그래픽 요소와 공간 데이터를 웹에서도 자유롭게 편집할 수 있습니다. 이에 대한 구체적인 내용은 FingerEyes-Xr을 이용해 개발된 NexGen의 편집 기능을 통해 확인이 가능하며, 이와 관련된 글은 아래와 같습니다.

넥스젠(NexGen)의 공간 데이터 편집 기능

FingerEyes-Xr은 수치지도와 항공영상과 같은 이미지 지도 뿐만 아니라 라스터(Raster) 기반의 셀 데이터에 대한 연산이 가능하고 그 결과 지도 상에 표현할 수 있습니다. 관련된 내용은 아래와 같습니다.

[GIS] FingerEyes-Xr, 핑거아이즈로 생성한 밀집도(밀도도)

또한 통계 데이터를 주제도와 파이차트 등으로 표현하여 통계지도를 생성할 수 있는데, 이에 대한 간단한 예시는 다음과 같습니다.

FingerEyes-Xr에서 주제도(Theme Map) 표현

FingerEyes-Xr에서 파이 차트(Pie Chart) 표현하기

또한 FingerEyes-Xr은 사용자가 보다 쉽게 지도 기반의 기능을 활용할 수 있도록 다양한 지도 관련 UI를 제공하여, 개발자가 쉽게 지도 기반 UI를 구성할 수 있도록 지원합니다. 그리고 GIS 미들웨어 서버인 GeoService-Xr과 연계하여 지오코딩 관련 기능을 제공하며, 관련 내용은 다음과 같습니다.

넥스젠(NexGen)의 스타쿼리(* Query) 기능

그리고 표고값을 이용하여 표고측정, 지형의 표고값을 활용한 지형단면도, 지형 평균경사도, 지형 3차원 가시화 가능을 제공합니다. 이에 대한 내용으로 FingerEyes-Xr을 이용해 개발된 NexGen의 지형 관련 기능은 아래 글과 같습니다.

넥스젠(NexGen)의 DEM 데이터를 활용한 측정 기능

이외에도 FingerEyes-Xr를 이용하여 지도와 관련된 더 많은 기능을 지원하고 있고, 새로운 기능들이 추가되고 있습니다. FingerEyes-Xr을 통해 지도와 관련된 그 어떠한 기능이라도 기술의 제약 없이 개발할 수 있습니다.