Kaggle 사이트 소개

원하는 Competition은 설치 후

kaggle competitions download -c feedback-prize-2021
 
다음과 같은 명령어로 다운로드하여 데이터를 얻을수 있다.

데이터들의 설명을 확인 가능하다. Column등 데이터 타입들에 대해 확인가능하다.

 

 

Posted by MIDDLE
,

1일차 순서 진행 

파이썬 다양한 Library 소개

 

Numpy 패키지

Numpy 는 파이썬에서 가장 많이 쓰는 수치 계산 라이브러리 벡터와 행렬 등 수학적인 데이터 구조를 표현하고, 연산하고 기본적인 효율적 구현되어있다. 우리가 사용하는 대부분의 패키지가 numpy에 의존함.

 

사용방법

 

import numpy as np

matrix_a = np.asarray([[4, 5, 2],
                       [5, 2, 6],
                       [6, 1, -2]])

matrix_b = np.asarray([[5, 9, 2],
                       [2, 0, 3],
                       [1, -4, 5]])
                       
matrix_c = matrix_a + matrix_b
print(matrix_c)

Result [[ 9 14 4] [ 7 2 9] [ 7 -3 3]]

 

 

 

Pandas 패키지

Pandas는  numpy를 기반으로, 보다 고차원적인 데이터 처리를 돕는 라이브러리이다. 동일한 데이터를 가진 Series를 기본으로하여, 이를 여러개 묵어 사용하는 Dataframe을 사용하여 표형태로 된 자료를 다룬다.

import pandas as pd
col_id = pd.Series(data=[5, 14, 21, 25])
col_team = pd.Series(data=['A', 'A', 'B', 'B'])
col_name = pd.Series(data=['김패캠', '정코딩', '박데사', '장머신'])
col_score = pd.Series(data=[100, 95, 60, 80])

df = pd.DataFrame(data={'Id': col_id,
                        'Team': col_team,
                        'Name': col_name,
                        'Score': col_score})
df.set_index('Id', inplace=True)
print(df)

Result

Team             Name                Score

A 김패캠 100
A 정코딩 95
B 박데사 60
B 장머신 80
df.groupby('Team').mean()

A 97.5

B 70

과같이 편리한 연산이 가능한 라이브러리

 

Matplotlib 패키지

Matplotlib는 Python에서 Matlab 스타일의 그래프를 그리기 위한 오픈소스 패키지이다. 각종 그래프를 표현할 수 있는 기반이 된다.

import matplotlib.pyplot as plt
x = np.linspace(0, 1, 100)
y = x
yy = x ** 2

fig = plt.figure()
ax = fig.gca()
ax.plot(x, y, 'r-')
ax.plot(x, yy, 'g-')
ax.set_title('Title')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend(['y = x', 'y = x^2'])
ax.grid()
fig.show()

Matplotlib 그래프

와 같은 방식으로 사용가능하다.

 

Seaborn 패키지

Seaborn은 matplotlib 패키지를 기반으로 보다 편하게 통계를 시각화 하기

위한 도구이다. 일반적으로 데이터사이언스에서 사용하는 대부분 그래프 지원함.

import seaborn as sns
sns.histplot(x='Score', data=df, hue='Team')

sns.boxplot(y='Score', x='Team', data=df)

 

Plotly 패키지 

Plotly 패키지는 Plotly 사에서 개발, 서비스하는 반응형 그래프 생성 엔진이다. 클라우드 기반의 엔터프라이즈 서비스는 유료로 젝공되지만, 로컬에서 사용하는 개인용 라이브러리는 오픈소스로 제공되어 무료로 사용할 수 있다. 

import plotly.express as px
fig = px.line(x=["a","b","c"], y=[1,3,2], title="sample figure")
fig.show()

 

확대 축소등 차트를 보다 더 정확하게 사용가능하다.

 

Posted by MIDDLE
,

Whole Brain Emulation 을 하기 위한 Issue 사항


1. Emulation System


에뮬레이션 시스템에는 두가지의 방법이 존재한다.

1. 외부에서 하드웨어를 통해 Body Interface를 통해 Brain Emulator 에 접근하는 방식

Body Model 에게 Action의 전달과 simulate된 감각 신호를 받게된다.


2. 완전한 가상을 통해 에뮬레이션 시스템을 동작하는 방식 이경우에는 시뮬레이터에서 시뮬레이터의 body를 통해 brain emulator와 연결하며 가장 큰차이점은 Action 동작이나 감각신호를 몸체 시뮬레이터에서 제어한다는 점이다.

외부에서 제어하는것이 아닌점이 가장 큰 차이점


에뮬레이션 소프트웨어에는 몇가지 이슈사항이 존재한다.

(1) 컴퓨터 자원 배분

(2) 에뮬레이션 제작 정보 수집

(3) 보안 시스템

(4) 다양한 Software Service 제공


일단 이러한 문제를 해결하기 위해서는 가장 근본적으로 필요로 해지는것은 Quantum Computing 이 아닐까 생각이 든다.

외냐하면 우리 머리속에서는 뇌속의 뉴런의 정보 전달 속도는 지금의 시스템으로는 터무니 없이 부족하기 때문이다. 이러한 문제로인해 제한적인 개발이 강제되어지고 있다.




2. Complication and Exotica

이색성과 복잡도 이것은 뇌에는 시신경과 같은 시스템만 존재하는것이 아니라 다양한 정보의 전달 방식들이존재한다. 수많은 다른 형태의 프로세싱들이 반드시 에뮬레이팅 되어야 한다.

그렇게 되므르써 중요하고 중요하지 않은 부분들에 대한 테스팅이 가능해진다.

3. Spinal Cord

전통적으로 척수는반사회로와 패턴 발생기로 여겨졌지만 실제로는 처리가 매우 복잡하고 학습과정이 축추세포를 통해 발생하는 증거가 있다.

네트워크는 고정적이고 단계적이지만 매우 유연하고 hardwired 하지 않을 수 도 있다.

이것은 중추 신경계와 뇌부분의 모방하는것이 비스캔 코드에 학습되어 많은 신체 컨트롤을 할 수 있게 한다.


4. Synaptic adaptation

시냅스는 보통 그들의 힘에 의해 개인 특성화 된다. 

주어진 진폭 크기에 따라 생성 되어지며 이것은 뇌의 다양한 기능을 수행하는데 쓰여진다. 

시냅스의 가소성

Neural Activity < Brain function role play, temporal filtering, mortor control, auditory processing < long term synaptic plasity


5. Unknown neurotransmitter and neuromodulators

10개 major neuroTransmitter가 존재하며 200개 이상의 neuron model  272개의 세포외 뉴런 활동신호 서로 다른 물질에 대한 발견 년도를 기록 해보면 시간이 지남에 따라 점점더 발견이 느려지는 S자형 성장이 일어나고 있습니다.

아미노산 계열 : Gamma - Amino buttnic, acidi GABA, glutamiate j Glu, Gly

아민 계얄 : Ach, DA, Epinephrine, Histamine

노르에피네프린 : NE, Serotonini-5-HT

펩타이드 계열 : CCK(콜레시스토키닌) Dynorphin(디노르핀 ), Enk(엔케필린), BAAG, 뉴로 펩타이드-Y,somatostain, substance P, VIP 등

주로 3가지 아미노산, 아민, 펩타이드 로 구성되어져 있다. 

모듈 신경전달 물질의 상한 경계는 수용체 뿐만아니라 세포막 단백질에 의해 조절될 수 있다.

이게 된다면 지금까지 단순 한계치 조절이 아닌 값조작이 한다는것을 의미할 수 있다. 가용성만 본다는것이 아니라 다양한 값조작이 확인되야할 수도있겠는데....

이러한 다양한 신경전달물질들이 존재하는데 이러한 것들의 각 행동을 정확히 이해해야 할필요있다.

그뿐만이 아니라

WBE Modelling 모듈들의 연결은 결정적이다. 이 의미는 뇌의 각 부분들에 대한 이해가 뿐만 아니라 그것들의 상관관계와 행동관계를 정확한 모델링하여 컴퓨터화하여 연결하는것에 초점을 두어야 한다.


6. Unknown ion channels

수용체와 비슷한 알려지지 않은 ion channel 에서의 뉴런 활동도 있다. 554개의 Ion entries가 71개의 디자인된 채널에서 143개의 유전자와 Super Family?? Ion channel은 뉴런 전자 다양성을 증가를 가능케 한다. 그러나 linear 한manner가 필요하다. 


7. Volume transmission

뇌를 감싸는 세포를 Extra cellular spce라 한다. 평균 200암페어 정도이며 뇌용적의 20%정도는 이것의 영양이 된다. 여유 이온을 전달하며 뇌 자극 물질또한 전달이 가능하다.(도파민 등)

그렇기에 정확한 3D 스캔이 필요해진다. 

이것은 확산을 제한하는 시간에 대한 정보 제공할것이다. 에뮬레이션 일부이며 어떤 화학 종류가 모델에 필요하게 되는지 알려주는 역할을 할 수 있도록 한다.


8. Body chemical environment

뇌 에뮬레이션 경우 화학물질의 일 부 측면의 환경을 시뮬레이션 해야한다.

이것 은 물질 대사에 관한 인간 대사 물질의 매칭이 필요하다. 신체 화학 모델은 WBE에 비해 매우 간단하다.

대사 보다 단백질 상호 작용 모델이필요한 경우 복잡성은 증대 되어진다.


9. Neurogenesis and remodelling

사람이 나이가 들어감에 따라 점점 똑똑해지듯이 뇌또한 나이를 먹어감에 따라 신경이 생성되어진다. 

일부뇌에서지만 분명 신경이 생성 되어집니다. 

근데 속도는 빠르지는 않은편이며 1주 약간 넘은 정도에 애성되어진다.

심지어 신경생성이 무시되어지더라도 에뮬레이션은 성인의 뇌로 진행될 것이다. 이것은 학습과 적응의 리모델링에 매우 중요하게 되어질것이다.

줄기 세포 증식은 시뮬레이션 하려면 다른세포에 나타나는 데이터 구조가 필요합니다. 이들의 분화 상태, 신경 발생 유발 데이터 및 세포를 네트워크에 점진적으로 발생할 수 이도록 해야한다. (세포 기하학, 역할모델, 조정 차별 모델) 

Posted by MIDDLE
,

제목 : Whole Brain Emulation RoadMap 

저자 : Oxford University anders sandberg, Nick Bostrom


위의 글에서 내가 맘에드는 부분만 빼내어 재해석하였다. 


Whole Brain Emulation (WBE) 는 학술적으로  미래에 실현해야할 중요 기술중 하나이다.


이유로는 4가지를 크게 들 수 있다.

Research

- 뇌 에뮬레이션은 컴퓨터 신경 과학의 뉴런 모델의 정확도를 비약적으로 늘릴수 있을수 있기때문에  논리적인 끝이다. 

- 뇌를 이해하는데에 큰도움을 줄 수 있으며, 학습과 경험에서 많은 테스트 셋을 제공할 수 있을 것이다.

- 뇌 모방 엔지니어링은 AI와 Brain-Computer Interface 패턴 인식등에 큰 발전을 가져올 수 있을 것이다.

- 현재의 지식을 학습을 통해 미래의 급진적인 확률에 대해 나타낼 수 있습니다.( 이해가 안되내..)

 

Economics

- 경제적인 관점에서는 복사가능한 뇌는 분명 큰 효과를 가져 올 것이다. 그리고 적은 확률적인 연관 사건들 조차도  심오한 사회적인 결과를 가져올것이다. 


Individually

- 만약 특별한 뇌를 에뮬레이션 저렴하고 가능할것이다. 그리고 만약 개인적인 존재에대해 만날 수 있다. 

에뮬레이션은 backup과 copy를 통해 디지털 불명성을 부여 가능할 것이다.


Philosophy

-  두뇌 에뮬레이션 자체는 마음 철학과 정체성 철학에서 많은 아이디어를 시험하거나 그러한 아이디어에 대해 생각할 수있는 새로운 맥락을 제공합니다.


- 그것은 인간의 향상의 급진적인 새로운 형태를 나타낸다.




시스템을 이해하기 위한 최소 조건

Brain Emulation은 뇌의 기능적 이해 없이는 달성 될 수 없다.

어떤 데이터가 관련이 있는지를 인식 할 수있는 모델과 이론이 필요하며 이를 개발하고 테스트하기위한 데이터를 제공해야합니다.

이론적으로 두뇌 에뮬레이션은 실제적으로 오른쪽 가장자리를 따라 어딘가에서 일어날 것이며, 최상위 레벨의 전체적인 이해를 훨씬 밑도는 것으로 나타날 것입니다.


다양한 종류의 저 현상에 대한 폭 넓은 이해를 포함한다.


우리는 시뮬레이션을 테스트하고 우리가 추구해야 할 데이터의 종류를 아는 더 높은 수준의 현상에 대해 어느 정도 이해해야합니다.


올바른 이해를 개발하고, 데이터를 수집하고, 계측을 강조하고, 제한된 에뮬레이션을 실험하기위한 올바른 연구주기를 조성합니다.

관련 분야에 유용한 서비스를 제공하고 유익한 스핀 오프를 제공하는 것은 WBE 개발에 없어서는 안 될 요소입니다


에뮬레이션의 레벨과 성공의 기준






시뮬레이션 Scale 단위


1 .세포 단위 시뮬레이션


2. 화학적 시뮬레이션


3. 유전적 표현


4. 구획 모델 (세포내)


5. 세포 전체 모델 (뉴런)


6. 로컬 네트워크 (뉴런을 네트워크모듈로 교체)


7. 시스템모델 ( 기능을 수행단위가 되지 않을까 생각함)





Levels of Brain Emulation


1. Computational Module : Classic AI High level 정보의 표현과 정보의 학습으로 만들어내는 모듈


2. Brain region connectivity : 각 영역은 기능 모듈을 나타내며 서로간에 연결되어 (species universial) “connectome”


3. Analog Network population model : 뉴런의 분포를 흉내내어 그들간의연결을 구현해는다. Activity 와 뉴런들의 상태 그룹을 그들의 시간별로 그룹으로 표현한다. 이것은 컨넥션 모델 ANN과 유사하다.

4. spiking neural network : firing state 와 synaptic states 가 추가된다.


5. Eletrophysiology : 전기적 신호 membrane state 가 추가된다. ion channel, 속성, 상태 ion 연결 전하량의 기준이 추가된다. 


6. Metabolome 대사체 : 대사물 신경 전달물지에 대해 고려되어야 한다.


7. Proteme : 단백질과 유전자 표현레벨이 추가되어야 한다.


8. State of protein complexes  : 4개의 단백질구조


9. Distribution of complexes : 세포내의 지도를 구성 할정도


10. Stochastic behavior of single molecules 세포 위치 또는 세포 기계 모델이 뇌 전체를 구성가능한정도


11. Quantum : 뇌와 양자 간의 연결이 가능한정도


4단계의 spiking 까지는 Threshold를 구성하여 tanh나 relu를 구현하면 될 것같은데 이후부터는 현재의 딥러닝에서 고려가 되어있는지는 자세히 모르겠다.


데이터의 필요

저단계의 Emulation에서는 엄청난양의 간단한 정보를 필요로 한다.


고단계로 갈 수록 적은량의 복잡한 정보를 필요로 한다.




학자들의 예측

뇌의 에뮬레이션이 필요로하는 레벨은 과연 어느정도인가 하면 대부분의 학자들은  4~6 레벨이면 뇌의 에뮬레이션을 구성할 수 있을것이라 고려하였다.

그러나 2명의 학자는 8~9 레벨에서 할 수 있을 것이라 예측하였다.

그러나 해당 글의 필자는8~9레벨의 에뮬레이션은 고차원의 에뮬레이션으로 저레벨의 에뮬레이션에서는 필요없을 것이라 생각한다.

그렇기에 이글에서는 4~6레벨에 집중하여 적도록 한다.



RoadMap

1. 요구사항

WBM 는 진행하기 위해 3가지의 능력이 필수사항으로 요구되어진다.


  • Brain Scan
    • Scan에는 각 조직의 역할 ( 세포와 축색돌기 상응관계 정의 등) 필요로하다.
    • 일반적으로 뇌과학에서 많이 쓰이지만, WBM에서 요구되는 정도는 이전보다 거대한 크기에서 손상에의 데메지가 적도록 조작이 가능해야 한다.
  • Software Model 작성
    • Imaging Method
      • 소프트웨어로로 만들기 위해서는 크게 3가지의 메인 이슈가 존재한다.
        • 동시까지는 아니지만 뇌전체의 구석구석까지도 이미지할 수있는 능력
        • 각 부위의 기능에 적절한 정보를 얻는 능력
        • 가장 작은 시스템까지도 에뮬레이션이 가능하도록 하는능력
    • Image To Software
      • 만들어진 Image를 소프트웨어화 시키는데에는 터무니없는 정교한 작업이 필요로 된다.
        • 이미지를 해석하여 적절한 시뮬레이션 파라미터로 변환하는 작업
        • 기계화 뇌과학 모델의 충분한 정확도
      • 이미지 프로세싱은 왜곡과 노이즈를 절대 피할수 없는 문제가 될 것이며, 적합한 데이터를 가끔 잃기도 할것이다.
      • 과도한 데이터 저장공간의 필요를 막기 위해 아마도 이 과정 중에는 원본 스캔데이터를 바로 넣는것이 아닌 압축된 형태로 적용하게 될터인데 그로인한 손실이 있을 수 있다.
    • 스캔 데이터 해석
      • 데이터의 관계도를 측정
      • 전기적 신호의 연관성, 세포 타입, 시뮬레이션 파라미터 정의
      • 그다음 이 정보를 에뮬레이션을 위한 "Inventory Database"라 한다.
    • 위의 작업들이 소프트웨어 모델을 작업을 하기위한 선행 작업이라 보면 된다.
    • Software Model
      • Software Model 작성에는 효율적으로 컴퓨터에 적용할 수 있는 뉴런 행동에 대한 수학적 모델이 필요로 한다.
      • 컴퓨터 뇌과학은 현재 뉴런의 속성, 뉴런의 네트워크, 시냅스, 학습 과정등에 초점이 맞춰져있다.
      • WBM에서는 이러한 것 뿐만아니라 여타 다른 subsystem들에 대한 모든 적절한 좋은모델이 필요로 하다.
      • 위와 함께 스캔데이터로부터 적절한 파라미터를 추출하여 써야한다.
      • 이로써 스캔된 뇌 전체의 컴퓨터화 된 모델이 만들어지게 된다.
    • Emulation Brain
      • 위의 과정등을 통해 모델이 만들어졌다면 이제 Emulation을 하면될탠데 이문제를 해결하기 위해서는 엄청난 양의 컴퓨터 자원이 필요로한다.
      • 위의 자료들을 유지할 수 있을만한 메모리가 필요
      • 적절한 속도로 돌아 갈 수 있도록 할 CPU가 필요
      • 위의 복잡한 작업들을 병렬로 처리 할 수 있도록 해야한다.
      • 위의 과정들을 처리 할 수 있을 만한 내부 Bandwidth또한 필수적이다.





WBE 개발에 있아서너느 필요로하는 주요 기술(Scanning, Interpretation, simulation)들이 존재한다. 만약 특정 어떠한것이 늦어진다면 어떻게 될것인가?

1. 그들이 만약 독립적으로 발달하게 된다면 사람레벨의 에뮬레이션을 하는데에 세가지 모두 충분히 발달하지 못할 가능성이 높다

2. 만약 컴퓨터 성능이 제한이라면 더욱더 복잡한 생물의 에뮬레이션 모델이 나타나야 할것이다.

3. 만약 Scanning 이나 Image Interpretation, Neural Simulation이 제한적이라면 비교적 획기적인 반전이 가능하다.

또한 Scanning Tech 가 작은 컴퓨팅에서 사용가능하도록 간단한 유기체에서 복잡한 유기체로 이전가능한 소프트웨어가 필요로하다. 

4. 컴퓨터 제한또는 스캐닝에 병목현상이 있는 경우 개발속도는 경제적에 따라 결정 되게 될것이다.


솔직히 WBE는 경제적이나 정치적으로 결정될 가능성이 매우 큰기술이다. 만약 충분한 연구가 만들어지게 되면 그때부터는 급속도로 WBE가 발전이 가능하도록 될것이다.



Posted by MIDDLE
,

Yoshua Bengio 교수님의 Deep Learning 책이 드디어 도착했습니다.(2주동안이나 기다렸다...) 
이 글에서는 책을 읽으면서 내가 이해하고싶은데로 이해하는 내용을 정리해보도록 합니다. ( 영어가 매우 부족한 관계로 내용은 반만 믿으시길 바랍니다..)


이 책에서는 목차로는 20 Chapter가 존재하며

1) Introduction

1. Applied Math and Machine Learning Basics

2) Linear Algebra

3) Probability and Information Theory

4) Numerical Computation

5) Machine Learning Basics

2. Deep Networks : Modern Practices

6) Deep Feedforward Networks

7) Regularization for Deep Learning

8) Optimization for Training Deep Models

9) Convolutional Networks

10) Sequence Modeling : Recurrent and Recursive Nets

11) Practical Methodology

12) Applications

3. Deep Learning Research

13) Linear Factor Models

14) Autoencoders

15) Representation Learning

16) Structured Probabilistic Models for Deep Learning

17) Monte Carlo Methods

18) Confronting the Partition Function

19) Approximate Inference

20) Deep Generative Models


이러한 형식으로 진행이 되어집니다.

1장에서는  딥러닝에 필요한 수학과 머신러닝의 기초에 대해 1~5Chapter동안 설명하며,
2장에서는 Deep Learning 의 기초를 설명하기위해 
Deep Learning 의 기초인 Feedforward Networks 에서부터 Trainning 방법 이미지 특징 추출 최적화 네트워크인 Convolutional NeuralNetwork와 시간의 순서에 따른 처리의 최적된 Recurrent neural network순으로 진행합니다.

3장에서는 Deep Learning 관련 실험들에 대해 설명하는것 같습니다. ( 이부분은 저도 봐야 알것같습니다.)


이 책의 참조사이트 주소 : www.deeplearningbook.org

다양한 자료와 강의용 Slide 도 제공합니다. 


딥러닝으로 부르게 된 이유 

 복잡한 문제를 계층적으로 표현하여 간단하게 표현한 그래프를 위에서부터 아래로 그래프는 깊어지며 많은 레이어를 보유하게 된다. 이러한 이유로 

AI Deep Learning 이라 부르게 되었습니다.


지식 기반의 학습

 딥러닝의 나오기 이전부터 IBM의 딥블루는 체스세계챔피언을 이길수 있는 역량을 이미 가지고 있었습니다. 논리적인 약속에 기반해 하드코딩하여 구석하는 인공지능을 지식기반의 학습이라 합니다.


머신러닝

 이러한 지식기반의 학습의 직면한 문제점은 하드코드된 시스템이기 때문에 AI System을 구석하기 위해서는 그들의 보유한 지식의 패턴을 추출해야할 필요가 있었습니다. 이러한 과정을 기계에게 맡겨 기계가 데이터의 패턴속에서 특징을 추출하는 것을 머신러닝이라 부르게 됩니다.

기본적으로 머신러닝 알고리즘으로는 Logistic regression이 존재하는데 결정을 하는데 도움을 줄 수 있으며, Naive Bayes 알고리즘은 Spam 이메일을 분리하는데 쓰이기도 합니다. 


이러한 머신러닝을 이용하여 뭘 할 수 있을까

Feature를 추출하여 할 수 있는 작업의 예

사진속에서 자동차인지 찾기 ( 자동차의 바퀴, 전조등 )





                                                  

Posted by MIDDLE
,

https://www.youtube.com/watch?v=lfHX2hHRMVQ

동영상 : RL Course by David Silver - Lecture 2: Markov Decision (DeepMind의 David Silver님 강의)


Reinforcement Learning 에 대해 공부하면서 Dr. David Silver님의 강의를 참조하여 공부하였습니다.


1. 강화 학습이란?

강화학습이란 어떤 환경에서 에이전트가 현재의 상태를 인식하여 어떤 행동을 취한다. 그러면 그 에이전트는 환경으로부터 결과(Reward)를 얻게 된다. 그 결과는 양수와 음수 모두 가능하며, 강화학습의 알고리즘은 그 에이전트가 앞으로 누적될 포상을 최대화 하는 일련의 행동으로 정의되는 정책을 찾는 방법이다.


사람이 게임을 한다고 생각해봅시다. 처음 그게임을 해보게 되면 이 게임은 ~~한 시스템이고 ~~한 조작을 해서 이렇게 조작하면 이길 수 있다. 근데 너의 손은 얼마나 빨리 움직이지? 이렇게 게임을 하지는 않을 것입니다. 아마도 아무것도 모르고 게임을 해보면 어떻게 게임을 하는지 이렇게 조작하면 지고 이렇게하면 이긴다는 것을 학습 할 것입니다.


강화 학습도 이와 같이 agent가 아무것도 모르는 환경에서 경험을 통해 학습하는 것입니다. 간단히 생각해 "컴퓨터니까 다 계산해서 게임하거나 로봇을 움직이거나 하면 안돼?" 라고 생각할 수 있지만 작은 grid world경우에야 모든 것을 계산해 할 수 있지만, 바둑같은 경우 혹은 실제 세상에서는 모든 것을 계산하는것은 불가능 한 일입니다. 하지만 모든 사람이 프로 바둑기사는 될 수는 없어도 하다보면 바둑을 둘 수 있게 됩니다. 인공지능이 사람의 그러한 학습 방법을 모티브 삼아서 학습 하는 것입니다.



강화 학습의 정의를 살펴 보면 "상태", "환경", "행동", "포상" 과 같은 단어들이 등장합니다. 문제를 풀고 싶을 때 가장 먼저 하는 것이 문제의 정의입니다. 실재로 무엇인가를 학습하기 위해서는 그 학습의 바탕이 되는 문제를 정의가 필수적입니다. 실재로 무엇인가를 학습하기 위해서는 그 학습의 바탕이 되는 문제의 정의가 필수적입니다. 강화학습에서는 그 문제는 MDP( Markov Decision Process)로 정의되며 특정Environment에서 Agent(사람으로 치면 뇌)가 그 Environment를 MDP로 이해합니다. 이 MDP라는 것에 대해서 살펴보는 것으로 강화 학습의 공부가 시작합니다.


2. MDP(Markov Decision Process)이란?

MDP를 배우기 전에 Markov하다는 말의 정의와 Markov Chain, Markov Reward Process에 대해 먼저 알아 봅니다. Markov는 러시아 수학자입니다.

Dynamics은 확률분포와 완전히 분리하여 정의 할 수 있습니다.

1.png



만약 신호가 Markov property인 경우 다른 한편으로는 환경과 작업이 3.4식과 3.5식이 같은 경우 모든 기록들 이경우에는 환경과 작업은 모두 Markov property를 가지고 있습니다.


첫 식 처럼 처음 어떤 상태로부터 시작해서 현재 상태까지 올 확률이 바로 전상태에서 현재 상태로 올 확률과 같을때 두번째 식처럼 표현 될 수 있고 state는 Markov 하다고 일컬어질 수 있습니다.


게임이라고 생각하면 어떤 상황은 이전 모든 상황에 영향받아 지금 상황이 된것이기 때문에 사실 지금 상황에 이전 상황의 정보가 모두 담겨 있습니다. 우리가 접근 하는 모든 state가 Markov property라 할 수 없지만 그럴 경우 state는 Markov라고 가정하고 강화학습으로 접근합니다.


강화 학습에서는 value라는 어떤 가치가 현재의 state의 함수로 표현되기 때문에 state가 Markov하다는 것은 상당히 중요합니다. 따라서 강화학습에서는 state가 Markov 하다라고 가정하고 실재로도 이렇게 가정했을 경우 문제가 생기지 않습니다. 

Screenshot from 2016-07-12 15:12:25.png

위 그림에서 로봇이 세상을 바라보고 이해하는 방식이 MDP가 됩니다. MDP란 Markov Decision Process의 약자로 state, action, state, probability, matrix, reward, discounted factor로 이뤄져 있습니다.

로봇이 있는 위치가 state, 앞뒤로 움직이는게 action 보석은 reward입니다.


1.png




 








Posted by MIDDLE
,

인공 신경망은 인간의 뇌가 패턴을 인식하는 방식을 모사한 알고리즘 이다. 인공 신경망은 시각, 청각 입력 데이터를 퍼셉ㅌ트론이나 분류 , 군집을 이요하여 해석하는데, 이렇게 해석한 결과를 이용하여 이미지, 소리,문자, 시계열 데이터에서 특정 패턴을 인식할 수 있습니다.


인공 신경망을 이용하면 각종 분류(Classification)및 군집화(Clustering)가 가능합니다. 지금부터 자세히 살펴 보겠지만, 단순하게 표현하면 ㅂㄴ류나 군집화를 원하는데이터 위에 여러가지 층(Layer)을 얹어서 원하는 작업을 하게됩니다. 각 층에서 라벨링이 되어있지 않은 데이터를 서로 비교하여 유사도를 구해주거나, 라벨링이 되어있는 데이터를 기반으로 분류기를 학습하여 자동으로 데이터를 분류하도록 할 수 있습니다. ( 구체적으로 이야기 하자면, 인공신뎡망으로 특징을 추출하고 그 특징을 다시 다른기계학습 알고리즘의 입력으로 사용하여 분류나 군집화를 할 수 있습니다. 즉 심층 신경망은 전체 기계학습 시스템의 구성요소로 생각하면 됩니다. 여기서 전체 시스템이란 강화하습, 분류 및 회귀를 말합니다.)


심층 신경망을 이용해보고 싶다면 우선 어떤 문제를 해결하고 싶은지 생각해보십시오. 즉 어떤 분류를 하고싶은지, 그리고 내가 어떤 정보를 취할 수 잇는지를 정해야 합니다. 예를들면 이메일 데이터를 과 으로 분류한다던지 고객을 과, 과로 분류할 수 잇씁니다. 이렇게 어떤 분류를 원하는 지 지정한뒤 분류에 필요한 데이터가 있는지생각해 보아야 합니다. 예를들어 이미과으로 라벨링된 이메일 데이터가 있는지 없다면 내가 직접 데이터셋을 만들 수 있는지를 고민해야 합니다.

또, 이 데이터로 원하는 라벨링이 과연 가능한 것인지도 생각해봐야 합니다.


예를들어, 암 고위험군에 속하는 사람들을 분류하는 알고리즘을 만들기위해서는 우선 암환자의 아닌 사람의 데이터가 필요합니다.

데이터는 사람들의 나이,흡연습관 같은 쉬운특징이나 일일활동량, 온라인 활동 로그같은 간접적인 특징등 무엇이든 가능합니다. 그러나 사람들의 건강과 관련된 개인정보가 전혀없는 상태라면 아무리 좋은 알고리즘이 있어도 암을 예측하니느 어려울것이다.


필요한 데이터가 잇따면 이제 인공신경망이 사람들의 암발병률을 예측허도록 학습을 할 수 있습니다.

즉, 암에 걸린/걸리지 않은 사람들이 각각 어떤 행동 패턴을 갖는지, 어떤 것을 기준으로 어떻게 분류하면 된는지를 신경망이 학습하도록 하는것입니다. 가지고 있는 데이터로 학습이 잘되었다면 이젠 사람들의 행동패턴을 이용해 그 사람들이 암에 걸릴 확률을 예상할 수 있습니다.


심층 신경망은 신경망 알고리즘 중에서 여러개의 층으로 이루어진신경망을 의미합니다. 한층은 여러개의 노드로 이루어져있습니다. 노드에서는 실제로 연산이 일어나는데, 이연산과정은 인간의 신경망을 구성하는 뉴런에서 일어나는 과정을 모사하도록 설계되어있습니다. 노드는 일정 크기 이상의 자그 받으면 일어나도록 되어있는데 그 반응의 크기는 입력값과 노드의 계수(또는 가중치(weight) 를 곱한값와 비례합니다. 일반적으로 노드는 여러개의 입력을 받으면 입력의 개수만큼 계수를 가지고 있습니다. 따라서 이계수를 조절함으로써 여러입력에 다른 가중치를 부여할 수 있습니다. 최종적으로 곱한값들은 전부 더해지고 그하바은 활성함수(activation function)의 입력으로 들어가게 됩니다. 활성 함수의 결과가 노드의 출력에 해당하며 이 출력값이 궁극적으로 분류나 회귀분석에 쓰이게 됩니다.

노드에서 일어나는 계산과정이 아래 다이어그램에 정리되어있습니다. 


Alt text


층은 여러개의 노드로 이루어져 잇으며 입력갑셍 따라 각노드의 활성화/ 비활성화 여부가 결정됩니다. 입력데이터는 첫번째 층의 입력이 되며 그이후엔 각층의 출력이 다시 다음층의 입력이 됩니다.

Alt text


이렇게 심층 신경망에서는 층마다 다른 층위의 특징이 학습이 됩니다. 낮은 층위의 특징은 단순하고 구체적이며 (예:이미지를 이루는 수평선, 수직선, 대각선) 높은 층위의 특징은 더욱 복잡하고 추상적입니다 (예:사람 모양, 자동차 모양, 고양이 모양, 얼굴 모양..). 이런 추상화 과정을 통해 심층 신경망이 아주 큰, 고차원의 데이터를 이해하며 이 과정은 수 억, 수 십억 개의 계수가 관여합니다. (이 과정에서 비선형함수를 사용합니다.)

또한 심층 신경망은 데이터를 이용해 데이터의 잠재적인 구조(latent structures)를 파악할 수 있습니다. 즉, 사진, 글, 비디오, 음성, 음악의 잠재적인 구조(어떤 물체가 사진에 있는지, 글의 내용과 감정이 무엇인지, 음성의 내용과 감정이 무엇인지 등)를 파악할 수 있습니다. 이를 통해 데이터가 라벨링되어있지 않아도 데이터간의 유사성을 효과적으로 파악할 수 있으며, 결과적으로 심층 신경망은 데이터 군집화에 아주 좋은 성능을 발휘합니다.

예를 들어 신경망을 이용해 대량의 사진 데이터를 받아서 비슷한 사진끼리 모아줄 수 있습니다. 구글 포토나 각종 사진 관리 앱의 스마트 사진 앨범 기능은 이런 기능을 이용한 것 입니다.

이런 군집화 기술은 다른 데이터에도 적용할 수 있습니다. 예를 들어 이메일에 이 기술을 적용하면 이메일의 내용에 따라 불만/항의 메일, 감사 메일, 문의 메일, 전혀 관계없는 스팸 메일 등 메일의 내용에 따른 분류를 할 수 있습니다. 이 분류 결과를 이용하면 고객관리에 큰 도움이 될 것입니다. 같은 방법을 전화 통화 녹음 데이터에도 적용할 수 있습니다. 사용자 로그같은 시계열 데이터를 사용하면 비정상 행위 탐지가 가능합니다. 스마트폰의 위치 데이터로는 사용자의 건강 상태 진단이 가능합니다.

심층 신경망이 일반적인 기계 학습과 다른 점은 특징 추출(feature extraction)이 자동적으로 이루어지는 점 입니다. 기존에는 효과적인 특징을 추출하기 위해 관련 분야 전문가가 오랜 시간동안 직접 특징을 추출하는 수식이나 방법을 고안해야 했습니다. 이 방법은 개발, 평가 및 보완에 많은 시간이 걸립니다. 심층 신경망은 이런 과정을 컴퓨터가 대신 하도록 알고리즘을 짠 것으로, 사람에 비해 훨씬 빠르고 효과적으로 수행해도록 학습시켜줍니다.

라벨링이 되어있지 않은 데이터를 학습하는 경우에 신경망은 데이터의 특징을 자동적으로 추출합니다. 이 자동 추출은 여러 가지 방법이 있는데, 보통 이 과정은 신경망을 통과시켰을 때의 출력이 입력과 같아지도록 학습합니다. 결과적으로 이 신경망은 입력을 효율적으로 인코딩하고 다시 이를 디코딩하는 - 간단하게 말하면 재구성(reconstruct)하는 - 작업을 합니다. RBM(Restricted Boltzmann machines)의 학습 과정도 이런 구조로 이루어져있습니다.


예제 인공신경망과 역전파(back prop)

인공신경망 학습의 목적은 출력의 오류를 최소화 하는것입니다. 운동장 주변의 트랙을 뛰는 달리기 경기를 생가해보자. 트랙을 여러ㅂ퀴 달리다보면 같은지점을 여러번 지나게 됩니다. 신경망 학습과정도 비슷하다. 우선 학습이 시작되면 뉴럴넷은  모든 계수를 초기화 합니다. 그리고 반복적으로 데이터를 보여주어서 학습을 합니다. 만일 학습이 잘되었다면 계수는 적절한 값으로 업데이트가 되어있을것이고, 이 인공신경망으로 각종 분류와 예측이 가능합니다.

학습과정 내부에선 같은 원리의 계수 업데이트가 반복적으로 일어납니다. 계수 업데잍의 원리는 우선 계수를 추정하고 그 계수를 사용했을때 발생하는 에러를 측정한 뒤 그에러에 기반해서 계수를 약간씩 업데이트 하는것입니다.

우리는 신경망의 여러계수를 합쳐서 모델이라고 부릅니다. 모델은 초기화 된 상태일 수도 있고, 학습이 완료된 상태일 수 도 있습니다. 실제로 데이터가 생성되는 원리는 알 수 없기 때문에 이것을 모사한 말그대로 모델인 셈입니다. 초기화된 모델은 의미있는 작업을 하지 못하지만, 학습이 진행될수록 모델은 임의의 값이 아닌, 실제와 유사한 결과를 출력하게 됩니다.

이는 인공 신경망이 데이터를 보기전까지는 아무것도 모르는상태이기 때문입니다. 계수를 임의의 값으로 초기화하는 이유도 마찬가지 입니다. 그리고 데이터를 읽어가면서 계수를 조금씩 올바른 방향을 업데이트 합니다.

이제 정말 단순하게 이과정을 식으로 표현하겠습니다.

입력값이 신경망에 들어오면 현재상태의 계수를 이용해 결과를 출력합니다.

그리고 이렇게 추정한 값을 실제정답과 비교합니다.

정답과 추정하는 차이가 바로 오차입니다. differ = (f(x) - y)^2 신경망은 오차를 측정하고 이오차를 반영해서 예수를 보정합니다. 이 아주 간략한 관계식에 인공신경망의 가장 중요한 내용이있습니다. 입력을 받아 출력을 내고, 오차를 계산한뒤 이를 반영해 계수를 업데이트 하는것입니다. 이 과정을 계속 반복하는 것이 학습과정 입니다.

이제 단계별로 자세히 살펴봅시다. 우선 입력을 받아서 출력을 추정하는 과정을 보겠습니다.


다중 회귀분석

인공신경망은 사람의 신경망을 모사한 측면이 있습니다. 하지만 결과적으로 인공신경망은 숫자와 수식으로이루어진 머신러닝 알고리즘 입니다. 사실 원리자체는 매우 간단해서 선형 회귀를 아는사람이라면 누구나 인공신경망을 이해할 수 잇ㅆ브니다. 선형회귀를 간단한 수식으로 표현하면 아래와 같습니다.

Y = b*X + a 

예를들면 X는 일일 운동량이고 Y는 발병률 , 또는 X는 비료 사용량이고 Y는 수확량이 될 수 있씁니다. Yrk ㅌ에 영향받는 모든 경우 이식으로 모델링 할 수 있습니다.

이제 회귀 분석식을 다중 회귀 분석으로 바꿔봅시다. 다중 회귀 분석은 회귀분석과 유사하지만 입력 변수가 여러개 입니다. 즉, 아래와 같은 식으로 표현가능합니다.

수확량을 예측경우라면 이 비료 사용량은 강루량은 일조량을 가정할 수있습니다. 이 세가지 변수는 모두 수확량에영향을 \끼칩니다.

사실 인공신경망의 모든 노드마다 별도의 다중 회귀분석이 이루어 집니다. 층의 출력은다음단계 층의 ㅇ입력이 된다고 이야기했었는데, 이 입력값이 바로위의 에 해당합니다. 그리고 노드가 갖고 있는 계수는 ...입니다. 다시말해 계수는 입력값을 얼마나 반영할 것인지를 정하는 가중치입니다. 그리고 신경망의 학습은 각 층의 입력 데이터중 어떤 값을 얼마나 반영할 것인지를정하는 과정입니다.

이렇게 계산된 추력은 나가진까지 비선형 함수를 한번 통과합니다. 여기에서 비선형 함수를 사용하는 이유는 여러가지 있습니다. 일반적으로, 출력의 범위를 제한하는 비선형 함수를 써서 노드의 출력값이 너무 크게 발산하지 않게합니다.( 이것보다 더중요한 목적은 함수의 비선형성이 필요하기때문입니다. 미분시 0으로 날아가버렷)

이렇게 회귀 분석과 비선형함수를 조합하면 노드는 켜고 끌수 잇는 스위치같은 역할을 합니다. (인간의 뉴런도 마찬가지입니다.) 이 스위치는 입력신호를 얼마나 출력에 전달하지를 정하고, 수많은 스위치의 조합이 최종 출력단에서 분류작업을 합니다.

전체 최종 출력단의 출력을 1/0제한하면 (binary decision)특정라벨에 대한 분류가 됩니다. 반면 로지스틱 회귀분석을 출력단에 붙이면 출력값이 0과 1사이의 연속적인 값이 나올수 있게됩니다.

각노드에서 비선형함수는 S자 모양의 비선형을 갖는 경우가 대부분입니다. Sigmoid 함수나 하이퍼 탄젠셜 함수가 여기에 해당합니다. 그리고 이 비선형 함수의 출력이 다음층의 입력값이 됩니다.

Gradient Descent

모델의 학습과정에서는 각 계수의값이 반복적으로 업데이트 됩니다. 이 업데이트 방법중 가장 널리 쓰이는 방법은"gradient descent" (경사 하강법)입니다.

Gradient는 경사 혹은 기울기를 의미합니다. x-y평면에서 기울기는 두변수의 관계를 설명해줍니다. x의 변화량에 따른 y의 변화량 - 예를 들어 시간에 따른 통장잔고의 변화량을 함수의 기울기로 설명할 수 있게됩니다. 인공신경망에서 우리는 신경망의 오차와 각 계수의 관심이 잇습니다. 즉, 각 계수의 값을 증가 혹은 감소시켰을때 신경망의 오차가 어떻게 변하는지 그 관계에 주목합니다.

조금 더 자세히 들여다봅시다. 계수를 어떤값으로 결정하면 전체에러가 가장 작앚질까요?

어떻게 노드의 계수를 설정해야 입력데이터에서 의미있는 정보를 추출할 수 있을까요?어떻게 해야 사진의 물체가 사람인지 자동차인지 고양이인지 알아낼수 있을까요?

인공신경망의 학습과정은 수많은 계수를 보정해나가는 과정입니다. 이계수는 오차를 ㅈㄹ이는 방향으로 보정되어야 하는 데이터에서 의미있는 추출 할 수 잇씁니다. 그리고 오차와 계수의 관계는 편미분으로 정의 할 수 있습니다. dE.dw가 계수의 변화량의 따른 오차의 변화량, 즉 우리에게 중요한 그 기울기에 해당합니다.

심층 신경망은 여러층으로 이루어져 있기 때문에 각 노드의 계수는 신호에 곱해지는 여러계수중 하나입니다. 따라서 이 관계를 미적분학의 Chain Rule을 사용해 설명할수 있습니다. 이 를 이용하면 신경망의 출력이 여러층과 갖는 관계를 구할수 잇씁니다. 그리고 결과적 각층의 계수와 최오 출력 과의 관계가 나옵니다.

Alt text

Alt text

즉 오차와 계수가 활성함수를 통해 정해지는 경우 최종적으로 계수값의 변화가 오차를 증가할지 혹은 감소할지를 구할수 잇씁니다. 반대로 활성함수를 바꾸는것이 어떤영향을 끼칠지도 구할수 잇씁니다.

이것이 심층신경망 학습 핵심입니다. 모델의 학습은 모델의 계수를 업데이트해서 오차를 줄이는 과정입니다.


로지스틱 회귀 함수

심층 신경망의 여러 층 중 마지막 층, 즉 출력층은 다른 층과 조금 다릅니다. 가장 흔한 작업인 분류(classification) 작업의 경우 출력 층은 데이터의 각 샘플이 여러 범주에 속할 확률을 구한 뒤 확률을 비교하여 그 중 하나의 범주를 선택합니다. 출력 층의 노드는 각각 하나의 범주에 해당하고 이 노드가 활성화 되는 정도를 비교하여 하나의 노드를, 즉 하나의 범주를 고릅니다.

분류 작업의 경우 최종적으로 출력 노드는 0 또는 1의 값을 가지게 됩니다. 즉, 무조건 해당 범주에 속하거나(1) 혹은 속하지 않는다(0)는 결론을 내리게 설계됩니다.

한편 입력 데이터는 출력과 달리 연속적인 값을 가지는 경우가 대부분입니다. 즉 입력 신호는 특정 범위에서 연속적인 값을 갖는 값으로 이루어져 있습니다.

예를 들어 추천 엔진을 구현하는 경우 최종 결과는 해당 아이템을 추천할 것 인지 아닌지로 딱 떨어지게 나와야 합니다. 하지만 입력 데이터는 고객이 해당 페이지에서 머무른 시간, 고객의 구매력 등 연속된 값을 갖습니다.

즉 입력으로 들어온 온갖 범위의 값(예: 3만원짜리 티셔츠, 고객이 과거에 구매한 내역, 고객이 웹사이트에 머무른 시간 등)을 압축해서 최종적으로 이 아이템을 어떤 범주에 넣을 것인지, 혹은 사용자가 어떤 타입의 고객인지 등 어떤 범주에 넣을지를 결정합니다.

이렇게 넓은 범위의 값을 0 또는 1의 값으로 결정해주는 과정을 로지스틱 회귀라고 합니다. 이 이름이 굉장히 헷갈리기 쉬운데, 회귀(연속된 값을 예측하는 작업)라는 이름이 붙여져 있지만 실제로는 분류 작업을 한다는 것을 유의하시기 바랍니다.

Alt text

로지스틱 회귀의 공식을 조금 들여다 보겠습니다.

연속된 값(예: -100, -0.5, 1.0, e^4, 300,…)을 확률로 표현해주려면 입력 값을 양수로 바꿔야 합니다. (확률은 0에서 1사이의 값을 가집니다.) 이렇게 양수로 바꿔주기 위해 분모에 e^(-x)가 들어갑니다. 왜냐하면 e^(-x)의 경우 x에 어떤 값이 들어오더라도 그 결과는 양수가 되기 때문입니다.

또 한 가지 고려할 내용은 바로 입력값 x가 클 경우 확률이 점점 증가하도록 설계해야 한다는 것 입니다. 그래서 e^(-x)가 분모에 포함되어 있습니다. 만일 x가 점점 커지면 e^(-x)는 (여전히 양수지만) 점점 작아집니다. 그러면 F(x)는 (확률의 최대 값인) 1에 가까워집니다. 반대로 x가 점점 작아지면 (-1, -10, -100…) e^(-x)의 값이 매우 커지고, F(x)는 0에 가까워집니다.

만일 이렇게 지수 함수로 처리를 하지 않는다면 결과를 0과 1 사이에 압축시키기가 매우 까다롭습니다. 따라서 지수 함수를 사용한 로지스틱 회귀를 인공 신경망의 출력층에 사용합니다.

최종적인 판단을 위해서 확률의 기준값을 세워주면 됩니다. 예를 들어 어떤 노드의 확률이 0.5보다 크다면 그 노드에 해당하는 범주에 속한다고 판별한다고 규칙을 만드는 것 입니다. 만일 이 기준값이 너무 작다면(예:0.0001을 넘기면 이 범주에 해당한다) false positive(긍정 오류, 거짓 양성: 실제로는 이 범주에 해당하지 않는데 이 범주라고 예측을 하는 것)가 많아지고, 기준값이 너무 크다면 반대로 false negative(부정 오류, 거짓 음성)이 많아집니다.

인공 신경망과 인공 지능

이렇게 임의의 값에서 출발해서 시행착오를 거듭하는 학습 과정 때문에 인공 신겸앙은 단순 무식한 방법(brute force)라고 비판받기도 합니다. 학습한 모델의 결과가 좋더라도 과정이 비효율적이라는 단점을 지적하는 사람들이 있기 때문입니다.

그러나 경사 하강법은 존재하는 모든 경우의 수를 다 따지는 것이 아닙니다. 계속해서 가능한 경우의 수를 줄여나가며 최적의 답을 찾는 과정이기 때문에 사실은 굉장히 효율적인 방법입니다.

학습 자료

인공 신경망 초보자들을 위한 강좌를 모아놓았으니 참고하시기 바랍니다.

Copyrig


Posted by MIDDLE
,



전체적인 하둡 커버로스 동작의 주요 단계는 다음과 같다.

- 모든 하둡 서비스는 KDC에 자신을 인증하고, 데이터노드를 네임노드에 등록한다. 이와 유사하게 태스크트래커도 잡트래커에 자신을 등록하고 노드매니저는 리소스 매니저에 등록한다?

- 클라이언트는 KDC에 인증한다. 클라이언트는 네임노드와 잡 트래커/리소스 매니저에 대한 서비스 티켓을 요청한다.

- HDFS내의 파일 접근을 위해 클라이언트는 네임노드 서버에 접속하고 파일을 요청한다. 네임 노드서버에 접속하고 파일을 요청한다. 네임노드는 클라이언트를 인증한 후, 블록 접근 토큰으로 클라이언트에게 인증정보를 제공한다. 데이터노드는 사용자에게블록 접근 토큰을 요청해서 클라이언트의 권한을 확인하고 요청한 블록에 대한 접근을 제공한다.

- 하둡 클러스터에 맵리듀스 잡을 제출하기전에, 잡 트래커는 클라이언트에게 위임 토큰을 요청한다. 이 위임 토큰은 클러스터에 맵리듀스잡을 제출할 때 이용된다. 잡트래커는 긴 시간 수행되는 잡을 위해 위임 토큰을 갱신한다.



'Cloud Service > Kerberos' 카테고리의 다른 글

CentOS6.6환경 Kerberos 설치 및 HDFS 연동  (1) 2016.05.09
Kerberos란?  (0) 2016.05.09
Posted by MIDDLE
,

리눅스는 쥐뿔도 모르지만.. Kerberos 설치를 시도해보겠습니다.


http://web.mit.edu/Kerberos/krb5-latest/doc/admin/install_kdc.html

CentOS 6에 MIT에서 docu로 제공되는 installation guide를 따라 설치를 진행해보겠습니다.


시작부터 Master KDC와 Slave KDCs를 가져야 된다고 하는데 저는 

Master KDC용 VM 하나와 Slave KDC용 VM 하나를 이용하여 제작하겠습니다.


주의 사항 

1. Kerberos system은 시간정보에 의존적이기 때문에 정확한 시간 정보가 필요하다. 

즉 Master와 Slave의 시간은 동기화가 되어져야 한다.


2. 설치및 액세스 보안을 KDC를 통하여 실행하는 것이 좋습니다. KDC는 파일서버, FTP서버, 웹서버 클라이언트, Kerberos 데이터베이스에 액세스할 수 있는 지역에 보안을 설정 할 수 있습니다.


3. Kerberos는 네임노드및 모든 데이터 노드에도 설치가 되어야 한다.

Master KDC 설치 및 설정

Kerberos 설치는 OS에 맞춰 제공되어지는 패키지를 통해 설치하여야 한다.


Kerberos 설치는 다음과 같은 과정으로 진행한다.

 - 보안된 하둡 클러스터 설치를 위한 선행조건

 - 커버로스 설치

 - 커버로스 인증을 위한 하둡 설정

 - 다중 영역 환경에서 사용자 설정



(1) 선행조건

다음은 보안된 하둡 클러스터를 설치하기 위한 선행 조건이다.

 - 클러스터를 설치하는 사용자에게 Root나 sudo접근권한 필요하다. (계정이 root라...)

 - 하둡 클러스터가 설정되어있고, 비 안전모드로 수행되고 있다. (기본 설정이 none secure)

 - 적절한 파일 권한이 로컬과 하둡 시스템 디렉토리에 할당 되어 있다. (이것도 Hadoop 실행계정이 root라..)

 - 만약을 위해 소스 코드로 부터 Kerberos를 빌드한다. 커버로스 소스코드를 컴파일 하려면 GCC 컴파일러가 필요하다. RHEL/CentOS에서는 yum groupinstall 'Development Tools' 명령어를 실행해서 필요한 모든 패키지를 설치한다.

 - 클러스터에 있는 모든 머신에서 DNS검색과 호스트 맵핑이 작동하고 있다. 커버로스는 IP로는 동작하지 않는다. 모든 노드에서 역 DNS검색이 되어 전체 주소 호스트명을 리턴해야 한다.

 - 커버로스가 사용하는 포트는 KDC를 위한 88번 포트와 관리서버를 위한 749번 포트다. 모든 노드가 KDC에 연결해서 인증하므로 88번 포트는 하둡 데몬을을 구성하는 클러스터의 모든 노드에게 열려야 한다.

      ☆ Port 설정 잘못해서.. 3일동안 시간만 버렸다. 주의 필요 

 - 하둡 클러스터 인증에 쓰일 커버로스 영역명이 있어야 한다.


(2) Kerberos Build 

a. Kerberos 설치를 위한 Source 를 받아보자.

다운로드 : http://web.mit.edu/kerberos/dist/index.html

빌드 가이드 : http://web.mit.edu/Kerberos/krb5-latest/doc/build/index.html

다운로드 페이지에서 Kerberos를 받은뒤 빌드가이드에서 지시하는데로 따라 설치하면 된다.

본인은 /root 에서

wget http://web.mit.edu/kerberos/dist/krb5/1.14/krb5-1.14.2.tar.gz

tar xvzf krb5-1.14.2.tar.gz

/root/krb5-1.14.2

b. 소스 디렉토리 설명

appl : Kerberos app Client와 server programs 있는곳

ccapi : 자격증명 cache services

clients : Kerberos V5 user Programs (User Commands 모아놓은곳 )

 - http://web.mit.edu/Kerberos/krb5-latest/doc/user/user_commands/index.html#user-commands

config : scripts 설정

config-files : Kerberos 설정 sample files

include : kerberos system build에 필요한 파일 넣는곳

kadmin : Kerberos master database에 접근하기 위한 인터페이스

kdc : Kerberos 인증 서비스와 키 배포 센터

lib : Kerberos Lib 모음

plugins : Kerberos Plugins directory

po : Localization Infrastructure

prototype: Template과 MIT copyright Message 수록

slave : slave KDC database에 propagating 하기 위한 유틸(kprop, kpropd)수록 (Forward propagation, back propagation 이런걸 의미하는 건가..)

tests : Test Suite

util :  building 하거나, 설정하기위한 다양한 유틸 코드 수록

windows : Windows에서 Kerberos를 Build하기위한 소스 수록


c. Build 해보자. ( 설치과정 a만 하고 올것 a설치 않하고 올경우 정상적인 빌드가 되지않는다.)

Using Autoconf (If you are not a developer, You can skip this section) 음... 지나가도 될까요.

Kerberos V5 source directory에서는 설정 script를 자동적으로 설정해주는 과정이 존재한다. 

이 설정 script는 autoconf 을 이용하여 생성 가능하다. 이미 설치 되어있으면.


사용자라면 autoconf를 할 필요가 없다. 이미 설정 script는 먼저 빌드가 되어있을것이다.

이 명령어는 반드시 source 디렉토리 최상위에서 실행 되어져야 한다.

ex) cd /root/krb5-1.14.2/src

     ./util/reconf --force

그리고 source package를 build해야 한다. 

ex) make all

     make install DESTDIR=somewhere-else

하면 빌드가 완성 된다~?

않되는데... (make *** no rule to make target all'. stop. ) 이러한 에러 발생 검색해보니


Build within a single tree

Kerberos build를 하나의 플랫폼에서 구성하고자 하면 이 명령으로 진행하면 된다. 

그러나 Kerberos를 통해 많은 숫자의 플랫폼을 구성하려 한다면 이 명령어는 적합하지 않다.

separate build trees for each platform 을 이용하여 진행해라.

ex)  cd /root/krb5-1.14.2/src

./configure

     make

끝이다..

ps) make check를 통해 make된걸 검사해보았다. 그랬더니  이전에 내가 지정한 hostname kdc.cw.com 이게 not known error가 발생 되어졌다.

vi /etc/hosts

127.0.0.1 에 kdc.cw.com 을 추가하니 문제는 해결되었다.


재 빌드 하고싶을경우

make clean 

make distclean 

이용하여 clean 한후 빌드 하자.


(3) Kerberos 설치

빌드되어진 package를 이용하여 설치를 진행해보자.

kdc.cw.com - master KDC

kclient.cw.com - slave KDC

CW.COM - realm name

.k5 hsa.cw.com - stash file

admin/admin - admin principal

a. build 과정 이전에 Key Distributed center를 설치 해야 한다.

RHEL/ CentOS

 : yum install krb5-server krb5-libs krb5-workstation

Ubuntu

 : sudo apt-get install krb5-kdc krb5-admin-server

명령을 이용하여 설치를 진행하면 된다.


b. Build 과정 진행


c. KDC 설치가 완료 되어지면 다음 단계는 적절한 KDC 환경설정을 진행해야한다. 

Build에서도 보시다시피 Master Slaves 관계를 맺을수 있지만, 

지금은 Master 단독 Node 관계로 진행하겠다.

vi /etc/krb5.conf

[libdefaults]

    default_realm = CW.COM

    dns_lookup_realm = false

    dns_lookup_kdc = false

    ticket_lifetime = 24h

    forwardable = true

    udp_preference_limit = 1000000

    default_tkt_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1

    default_tgs_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1

    permitted_enctypes = des-cbc-md5 des-cbc-crc des3-cbc-sha1


[kdc]

 profile = /var/kerberos/krb5kdc/kdc.conf


[realms]

    CW.COM = {

        kdc = kdc.cw.com:88

        admin_server = kdc.cw.com:749

        default_domain = cw.com

    }


[domain_realm]

   .cw.com = CW.COM

    cw.com = CW.COM


[logging]

    kdc = FILE:/var/log/krb5kdc.log

    admin_server = FILE:/var/log/kadmin.log

    default = FILE:/var/log/krb5lib.log


위와같이 처리 진행하여야 한다.

vi /var/kerberos/krb5kdc/kdc.conf
default_realm = CW.COM

[kdcdefaults]
    v4_mode = nopreauth
    kdc_ports = 88

[realms]
    CW.COM = {
        kdc_ports = 88
        kadmind_port = 749
        admin_keytab =  /var/kerberos/krb5kdc/kadm5.keytab
        database_name = /var/kerberos/krb5kdc/principal
        acl_file = /var/kerberos/krb5kdc/kadm5.acl
        key_stash_file = /var/kerberos/krb5kdc/stash
        max_life = 10h 0m 0s
        max_renewable_life = 7d 0h 0m 0s
        master_key_type = des3-hmac-sha1
        supported_enctypes = arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
        default_principal_flags = +preauth
    }


와 같이 설정한뒤
KDC는 KDC데이터베이스내에 각 사용자의 자격증명을 저장한다. 데이터베이스는 파일일 수도 LDAP 저장소 일수도 있다. 파일 기반 KDC 데이터베이스를 설정하려면 영역명을 이용해서 다음과 같은 명령을 실행한다.
root@kdc ~#kdb5_util create -r CW.COM -s
실행한다. (CPU에따라 다르지만 엄청 걸린다. 인내심을 가지고 기다리자. 제경우는 30분)


이제 kdc Server를 실행 시켜보자.
/etc/init.d/krb5kdc start

netstat -au | grep k
udp        0      0 *:kerberos                  *:*
udp        0      0 fe80::5054:ff:fe7e::kerberos *:*
위와같은 상태를 확인 가능하다.

d. 최초 커버로스 관리자 설치 
마스터 KDC 서버에서 kadmin.local 명령어로 KDC 데이터베이스 내 Principal의 패스워드를 설정한다. 관리자 pricipal을 설치하고 관리자 principal 패스워드를 제공하려면 다음 명령어를 실행한다.

kadmin.local -p admin/admin

kinit 명령어는 사용자를 인증하기 위해 사용한다. KDC가 사용자를 인증 할 수 있도록 kinit를 써서 관리자 인증을 확인할 수 있다.
kinit admin@CW.COM

e. 사용자 또는 서비스 Principal 추가
관리 사용자 설치가 끝나고 커버로스 데몬이 구동되면, kadmin 유틸리티를 사용해 커버로스 데이터베이스에 Principal을 추가할 수 있다.
add_principal -randkey user/mydomain.com@CW.COM


f. Hadoop과 Kerberos
이제부터 본격적으로 Hadoop과 Kerberos를 연동하기 위한 설정을 진행해보자.

하둡 커버로스 인증 설정 단계

(1) HDFS, 맵리듀스, YARN Principal 생성


(2) HDFS, 맵리듀스, Yarn Keytab 생성


(3) 모든 슬레이브로 키탭 복사


(4) 키탭 파일을 위한 적절한 권한 설정


(5) 하둡 환경설정 업데이트


(6) 보안된 데이터노드와 테스크 트래커 설정


g.모든 하둡 노드에 Kerberos Client 설치

yum install krb5-libs krb5-workstation

위의 명령어를 각 하둡 노드 (마스터노드, 슬레이브 노드)에 커버로스 클라이언트를 설치하여야 한다.


h. 하둡 서비스 Principal 설치
하둡 데몬 실행에 이용되는 세 사용자 hdfs, mapred, yarn가 있다. 네임노드와 데이터 노드 그리고 세컨더리 네임노드와 같은 모든 하둡 분산 파일시스템 관련 데몬은 hdfs사용자에 의해 수행된다. 이와 달리 MRV2에서는 mapred사용자가 JobHistory Server 와 Mapreduce Application 실행하고, yarn 사용자가 resource manager와 nodemanager를 실행한다.

Hadoop 데몬의 커버로스 인증이 가능하려면 KDC안에 hdfs, mapred, yarn 프린시플을 생성 해야한다.
이 서비스들은 모두 http를 이용하므로 http 서비스 principal도 생성 해야 한다.
Principal 생성을 위해 kadmin 을 이용한다.
근데......
kadmin 치니
Authenticating as principal root/admin@MYREALM.COM with password.
kadmin: Client not found in Kerberos database while initializing kadmin interface
이러한 에러가 발생한다. 
이 에러의 발생 이유는 
kadmin.local 에서 root/admin@MYREALM.COM가 등록 되어있지 않기 때문에 발생 되는 문제였습니다.
[root@kdc ~]# kadmin.local
Authenticating as principal root/admin@CW.COM with password.
kadmin.local:  add_principal root/admin@CW.COM
WARNING: no policy specified for root/admin@CW.COM; defaulting to no policy
Enter password for principal "root/admin@CW.COM":
Re-enter password for principal "root/admin@CW.COM":
Principal "root/admin@CW.COM" created.

등록하게 되면 이후 부터 kadmin에 접근이 가능해진다.

i. 하둡 KeyTab 파일 생성
kadmin
kadmin: xst -k hdfs-unmerged.keytab hadoop/cw.com@CW.COM 
을 이용하여 hadoop 생성

ktutil
ktutil:  rkt hdfs-unmerged.keytab
ktutil:  wkt hdfs.keytab
ktutil:  clear
을 통하여 keytab 적용
klist -e -k -t hdfs.keytab
만들어진 Keytab 확인 가능하다.

j. SSH 를 Kerberos를 통하여 제어를 해보자.
문서를 참조 하였다.
문서의 순서대로 따라 오게 된다면 
keytab까지는 등록이 완료된 상태가 되어진다.
하지만!!!!!!! Keytab으로 등록하게 된다면 random key로 생성이 되어지기 때문에 
kinit host/kdc.cw.com@CW.COM
password 입력 : 
하게 될 경우 incorrect라는 말만 계속해서 볼 수 있다.
이 경우 해결 방안은 2가지가 있다.
(1) Keytab을 이용하여 인증을 받느냐.

Without Keytab하여 Random key가 아닌 사용자 지정 비밀번호를 이용하여 
(2) kinit host/kdc.cw.com@CW.COM
password 입력 : ******
인증하는가.
선택하여 진행하면된다.


----------------------------------- SSH 까지는 연결 완료 ----------------------------------------------

k. Hadoop과 Kerberos와의 연동을 진행 해보자.

'Cloud Service > Kerberos' 카테고리의 다른 글

Hadoop과 Kerberos  (3) 2016.05.10
Kerberos란?  (0) 2016.05.09
Posted by MIDDLE
,

1. Kerberos 란??

kerberos는 네트워크 인증 protocol이다.

네트워크 보안에서 Username과 password를 계속해서 보낸다는 것은 매번 password를 가로챌 수 있는 기회를 제공하는 것과 동일하다. 그리하여 Kerberos에서는 이러한 Username과 password의 전송을 최소화로 만들도록 지원한다.


2. Kerberos와 Firewalls의 차이 

기존의 보안체계인 Firewalls과 같은 경우는 위험성이 외부에서만 접근할 것이라는 추측을 토대로 제작되어졌다. 하지만 공격의 빈도는 내부에서 더많이 이뤄진다는것을 알 수 있었다.


3. Kerberos의 아키텍쳐


그림 출처 : http://www.slideshare.net/BibekNam/kerberos-authentication-protocol

(1) Kerberos 구성요소 

3가지 Components로 구성되어 있다.

 - Client

 - Authentication Server or Key Distribution Serber (KDC)

 - Server

3가지 주요 활동이 있다.

 - Authentication Service (AS) Exchange

 - Ticket Grating Service (TGS) Exchange

 - Client Server (CS) Exchange


(2) AS Exchange

 a. Client와 Authentication Server(KDC) 간의 교환

 b. Client는 KDC에게 KRB_AS_REQ msg를 통해 인증 생성을 요청한다.

 c. KDC는 Client에게 KRB_AS_REQ에 대한 응답으로 ticket에 Session Key를 넣어 응답해준다.

 d. Session Key는 사용자 비밀번호를 이용하여 암호화 된다.

 e. ticket(Ticket Granting Ticket)은 서버의 비밀키를 이용하여 암호화 한다.


(3) TGS Exchange (TGS는 서버로 연결하기 위한 Service Ticket을 얻는 과정)

 a. Client는 TGT를 인정서버로 보내 Server에 접속하기 위한 Service Ticket을 요청한다.

 b. KDC에서는 Server에 접속하기 위한 Service Ticket을 첨부하여 답변해준다.


(4) CS Exchange (Service Ticket을 통하여 Server로 접속하는 과정)

 a. Client는 Service Ticket을 Server로 전송하여 인증을 요청한다.

 b. Server는 Client ticket의 비밀번호와 session key를 복호화하여 Client를 검증한다

 c. 인증 절차가 성공일 경우  Client와 Server가 연결 되어진다.


4. Kerberos 기반 원격 응용프로그램

 - ftp

 - rcp

 - rlogin

 - rsh

 - ssh 

 - telnet


5. Kerberos 주체

kerberos 서비스의 클라이언트는 주체로 식별된다. 주체는 KDC가 티켓을 지정할 수 있는 고유 ID이다. 주체는 사용자 또는 서비스일 수 있다.

주체 이름은 기본요소, 인스턴스, 영역이라는 세가지 구성요소로 구분된다. 예를 들어 Kerberos주체는 foo/admin@ENG.EXAMPLE.COM이다. 위 예에서 각 요소의 역할은 다음과 같다.

 - foo는 기본요소. 기본요소는 사용자 이름 또는 서비스(예 : nfs)일 수 있다. 기본요소는 host라는 단어일 수 도 있다. 단어의 주체는 다양한 네트워크 서비스 ftp, rcp, rlogin등을 제공하도록 설정된 서비스 주체임을 의미한다.

- admin은 인스턴스. 인스턴스는 사용자 주체의 경우 선택적이지만, 서비스 주체의 경우에는 필수이다. 예를 들어 사용자 foo가 가끔 시스템 관리자 역할을 수행하는 경우 foo/admin을 사용하여 자신과 자신의 일반적인 사용자 ID를 구별할 수 있다. 즉 Kerberos는 foo와 foo/admin을 다른 두 주체로 취급한다.


6. Kerberos 영역

영역은 도메인과 유사한 논리적 그룹. 동일한 마스터 KDC아래에 있는 시스템 그룹을 정의한다. 일부 영역은 계층형으로, 한 영역이 다른 영역의 수퍼 세트이다. 또 다른 영역은 비계층형으로, 두영역간의 매핑을 정의해야 한다. Kerberos서비스의 특징은 영역간 인증을 허용한다는 점이다. 이 Kerberos 기능을 영역간 인증이라고 한다.


7.Kerberos 서버

각 영역에는 주체 데이터베이스의 마스터 복사본을 유지관리 하는 서버가 있어야 한다. 이서버를 마스터 KDC서버라고 한다. 또한 각 영역에는 주체 데이터베이스의 복제 복사본을 포함하는 슬레이브 KDC서버도 한개이상 있어야 한다.

마스터 KDC서버와 슬레이브 KDC서버모두 인증을 설정하는데 사용되는 티켓을 만든다.

이서버는 Kerberos화된 서비스에 대한 액세스를 제공한다.


8.Kerberos 제어를 위한 API

http://web.mit.edu/kerberos/krb5-current/doc/users/user_commands/kinit.html

참조해보자... 




'Cloud Service > Kerberos' 카테고리의 다른 글

Hadoop과 Kerberos  (3) 2016.05.10
CentOS6.6환경 Kerberos 설치 및 HDFS 연동  (1) 2016.05.09
Posted by MIDDLE
,