퍼셉트론(Perceptron)

|

Perceptron

퍼셉트론은 1957년에 고안된 오래된 알고리즘이자, 딥러닝의 기원이 되는 알고리즘입니다.

퍼셉트론은 아래의 그림처럼 다수의 신호를 받아서 하나의 신호를 출력합니다. 이 때 출력값으로는 0 또는 1의 값만 가질 수 있습니다.

Image

위 그림을 수식으로 표현하면

[output = w_1 x_1 + w_2 x_2 + … w_i x_i]

가 되며, output은 0 또는 1의 값만 가지기 때문에 결과적으로 다음과 같은 식이 됩니다.

[output = \begin{cases} 0 ( w_1 x_1 + w2 x_2 + … + w_i x_i \le θ )
1 ( w_1 x_1 + w2 x_2 + … + w_i x_i > θ ) \end{cases}]

여기서 w 값은 가중치를 의미하며, $ θ $(theta)는 임계값이라고 합니다.


AND, OR, NAND 게이트

퍼셉트론을 이용하면 AND, OR, NOR 게이트 등을 아주 쉽게 만들 수 있습니다.

예를 들면 다음과 같습니다.


AND 게이트

$ x_1 $ $ x_2 $ y
0 0 0
1 0 0
0 1 0
1 1 1

이를 만족하는 ($ w_1 $, $ w_2 $, $ θ $) 조합은 (0.5, 0.5, 0.7), (1.0, 1.0, 1.0) 등 무수히 많은 조합이 나올 수 있습니다.


NAND 게이트

$ x_1 $ $ x_2 $ y
0 0 1
1 0 1
0 1 1
1 1 0

NAND 게이트는 AND 앞에 Not이 붙었기 때문에 ($ w_1 $, $ w_2 $, $ θ $) 조합을 간단히 (-0.5, -0.5, -0.7) 등과 같은 값을 입력해도 충분히 구현할 수 있습니다. 물론 조합의 경우의 수는 엄청 많습니다.


퍼셉트론 구현하기

퍼셉트론은 다음과 같이 간단한 코드로 구현할 수 있습니다. (Python 코드입니다.)

def AND(x1, x2):
    w1, w2, theta = 0.5, 0.5, 0.7
    value = x1 * w1 + x2 * w2
    if value <= theta:
        return 0
    elif value >= theta:
        return 1


bias 도입

[output = \begin{cases} 0 ( b + w_1 x_1 + w2 x_2 + … + w_i x_i \le 0 )
1 ( b + w_1 x_1 + w2 x_2 + … + w_i x_i > 0 ) \end{cases}]

위와 같이 기존의 퍼셉트론 수식에 b라는 값을 더해서 편향(bias)을 표현할 수 있습니다. 편향은 ‘한 쪽으로 치우쳐 균형을 깬다’는 의미를 갖고 있으며, 직선 그래프를 y축으로 b만큼 이동시키는 역할을 합니다.

$ w_1 $, $ w_2 $ 등의 가중치는 입력 신호가 결과값에 얼마나 큰 영향을 미치는지의 정도이며, b 값은 뉴런이 얼마나 쉽게 활성화하는지를 조절하는 매개변수입니다.

경우에 따라 b, $ w_1 $, $ w_2 $ 등을 전부 ‘가중치’라고 부르기도 합니다.


퍼셉트론의 한계

퍼셉트론을 이용하면 AND, OR, NAND 등의 게이트를 구현할 수 있었습니다. 하지만, XOR 게이트의 경우는 퍼셉트론만으로는 도저히 구현이 불가능합니다. 퍼셉트론은 직선으로 영역을 나누는데, XOR 게이트는 직선으로 영역이 나누어지지 않기 때문입니다.

Image


다층 퍼셉트론

하지만 퍼셉트론을 여러 겹으로 층을 쌓은 다층 퍼셉트론(Multi-layer Perceptron)을 이용하면 XOR을 표현할 수 있습니다.

Image

이를 Python 코드로 보면 다음과 같습니다.

def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    result = AND(s1, s2)
    return result;

다층 퍼셉트론은 단층 퍼셉트론이 하지 못하는 복잡한 일들을 할 수 있습니다. 심지어 계산기나 컴퓨터까지 표현이 가능합니다.

Docker 설치하기 (Ubuntu)

|

Install Docker on Ubuntu

공식 문서는 여기를 참조하세요.


필요 모듈 설치

$ sudo apt-get update

$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common


Docker 공식 GPG 키 다운로드

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -


Repository 추가

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"


Docker 설치

$ sudo apt-get update

$ sudo apt-get install docker-ce


Docker 실행 확인

$ sudo docker run hello-world

위 명령어를 실행하면 hello-world 이미지를 내려받고 실행할 것입니다.

Docker 설치하기 (RedHat/CentOS)

|

Install Docker

Linux 버전별 Docker 설치 방법은 다음과 같습니다.


Ubuntu

$ sudo apt-get update
$ sudo apt-get install docker.io


RHEL (RedHat Enterprise Linux) 또는 CentOS 6

RHEL이나 CentOS 6의 기본 패키지 저장소에는 docker-io 패키지가 없습니다. 그래서 EPEL(Extra Pacakges for Enterprise Linux)을 먼저 설치해야 합니다.

$ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum install docker-io

만약 AWS의 EC2에 설치하는 RHEL의 경우는 EPEL 저장소를 바로 사용할 수 있기 때문에 docker-io만 설치하면 됩니다.


CentOS 7

sudo yum install -y yum-utils

sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

sudo yum makecache fast

sudo yum install -y docker-ce

sudo systemctl start docker

sudo systemctl enable docker

sudo gpasswd -a centos docker

아나콘다 env 생성하기

|

Anaconda env

env는 Python의 독립적인 가상의 실행 환경(Environment)를 말합니다.

아나콘다 패키지로 설치한 경우 conda 명령어를 이용해서 env를 생성/삭제 및 관리할 수 있습니다.


env 생성

$ conda create -n snowdeer_env python=3.5

Python 3.5 버전의 ‘snowdeer_env’라는 이름으로 env를 생성합니다. (현재 Windows에서 Keras를 설치할 거면 Python 버전을 3.6이 아닌 3.5로 해야 합니다.)


env 리스트 보기

$ conda env list


env 활성화

$ activate snowdeer_env


env 비활성화

$ deactivate


env 삭제

$ conda env remove -n snowdeer_env


env에 Tensorflow, Keras 설치

$ activate snowdeer_env

$ pip install tensorflow

$ pip install keras

Tensorflow와 Keras의 설치 확인은 다음 명령어를 이용해서 확인할 수 있습니다.

$ python

$ import tensorflow as tf

$ print(tf.__version__)
1.4.0

$ import keras
Using TensorFlow backend.

apt 명령어 사용법

|

apt 명령어 사용법

명령어 설명
apt-cache search [keyword] 키워드를 포함하고 있는 패키지 명과 설명 출력. 대소문자 구분 없음
apt-cache show [package name] 해당 패키지의 정보 출력
apt-get update /etc/apt/sources.list를 참조해서 패키지 데이터베이스를 업데이트. 만약 source.list를 변경했다면 반드시 실행해줘야 하는 명령어
apt-get upgrade 설치되어 있는 모든 패키지를 최신 버전으로 업그레이드
apt-get dist-upgrade 전체 시스템을 새로운 버전으로 업그레이드. 여기에는 패키지 삭제도 포함됨. 시스템 업그레이드 용도로는 잘 권장하지 않는 방법
apt-get install [package name] 해당 패키지를 다운받아서 설치
apt-get -d install [package name] 해당 패키지를 /var/cache/apt/archives 디렉토리에 다운만 받고 설치하지 않음
apt-get autoclean 불완전하게 다운로드된 패키지나 오래된 패키지를 삭제함
apt-get clean /var/cache/apt/archives에 저장된 캐시 파일들을 모두 삭제
apt-get remove [package name] 해당 패키지와 그 설정 파일들을 보두 삭제. --purge 옵션은 설정 파일을 보존하는 옵션

그 외에도 -f 옵션은 의존성 문제가 발생했을 때 시스템을 정상적으로 만들어주는 옵션이며, -u 옵션은 업그레이드된 패키지를 보여줍니다. 설정 파일까지 모두 삭제하는 -purge 옵션도 있습니다.