전체 글 (317)

반응형

SRY Gene


생물학에서 성염색체의 유전자형이 XX이면 여자, XY이면 남자라는 것은 많은 분들이 생물 시간에 배워서 잘 아실 것입니다. 인간의 유전체는 22쌍의 상염색체와 1쌍의 성염색체로 이루어져 있으며, 일반적으로 성염색체가 XX면 여자, XY면 남자로 태어나게 됩니다. 왜 XX면 여자이고, XY는 남자가 되는 것일까요? 유전자 발현 측면에서 보면 Y 염색체에 존재하는 SRY(sex-determining region Y) Gene에 의하여 남자와 여자의 차이가 생긴다고 할 수 있습니다. SRY Gene이 발현하여 SRY Protein 을 생성하게되면 이것이 마치 전사인자(transcription factor)처럼 작용하게 됩니다. 이것이 DNA 특정 부위에 붙여서 특정 gene의 활성화를 돕게 되는 것입니다. 예를 들어, SRY Gene의 산물인 SRY Protein이 상염색체의 SOX9 gene을 활성화시키면 세정관과 고환을 형성하게됩니다. 또한 SRY gene의 산물은 남성으로의 분화를 도우면서 난소, 나팔관 등의 여성의 생식기관의 형성은 억제시킵니다. 여성도 상염색체 상에 SOX9 gene을 갖고 있으나, SRY Gene이 없으므로 활성화되지 않는 것입니다.



SRY Gene의 돌연변이


남성과 여성의 구분이 특정한 유전자에 의해 일어나기 때문에 이 유전자에 돌연변이가 생기면, XY 염색체를 갖은 남자, XX 염색체를 갖은 여자가 태어날 수도 있습니다. Swyer Syndrome(스와이어 증후군)은 XY 염색체를 가지고 있으나 SRY gene의 mutation에 의해 제대로 발현하지 못하여 XY 염색체를 갖고 태어나는 경우로 이 때 XY 염색체를 갖은 여성이 태어나게 됩니다. 이와 비슷한것은 androgen insensitivity syndrome(안드로겐 무감성 증후군)이 있는데 이는 남성호르몬을 수용하지 못해 XY 염색체를 갖은 여성이 생기는 경우입니다.


반면 46, XX testicular disorder of sex development 라는 것도 있는데, 매우 드문 증후군으로 X, Y 간의 translocation에 의해 SRY Gene이 X 염색체에 위치하여 XX 염색체를 가짐에도 불구하고 남성이 되는 것입니다.



Y 염색체 상에서의 위치


<Y 염색체>


SRY 유전자는 Yp11.2에 있으며 이 뜻은 Y 염색체의 p arm의 11.2 position에 SRY 유전자가 위치한다는 뜻입니다. p arm이란 염색체를 동원체를 기준으로 나눴을 때 짧은 부분을 말합니다.




참고


https://ghr.nlm.nih.gov/gene/SRY#conditions

http://blog.naver.com/shinefact/90172920000

반응형
반응형

Keras 모델 저장하고 불러오기


/* by 3months. 2017.7.19 */


keras를 통해 MLP, CNN 등의 딥러닝 모델을 만들고, 이를 학습시켜서 모델의 weights를 생성하고 나면 이를 저장하고 싶을 때가 있습니다. 특히 weights 같은 경우는 파일 형태로 저장해놓는 것이 유용한데, 파이썬 커널을 내리는 순간 애써 만든 weights 가 모두 메모리에서 날라가 버리기 때문입니다. keras에서는 모델과 weights의 재사용을 위해 이를 파일형태로 저장하는 라이브러리를 제공하며, 이를 통해 모델과 weights를 파일 형태로 저장하고 불러올 수가 있습니다.


Keras에서 만든 모델을 저장할 때는 다음과 같은 룰을 따릅니다.

  • 모델은 JSON 파일 또는 YAML 파일로 저장한다.
  • Weight는 H5 파일로 저장한다.


아래는 모델을 저장하고 불러오는 실습 코드입니다.



라이브러리 임포트

from keras.models import Sequential
from keras.layers import Dense
from keras.callbacks import ModelCheckpoint
import matplotlib.pyplot as plt
import numpy
import pandas as pd


데이터 로드

url = "https://archive.ics.uci.edu/ml/machine-learning-databases/pima-indians-diabetes/pima-indians-diabetes.data"
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']

dataframe = pd.read_csv(url, names=names)
array = dataframe.values

X = array[:,0:8]
Y = array[:,8]


모델 생성

# create model
model = Sequential()
model.add(Dense(12, input_dim=8, kernel_initializer='uniform', activation='relu'))
model.add(Dense(8, kernel_initializer='uniform', activation='relu'))
model.add(Dense(1, kernel_initializer='uniform', activation='sigmoid'))

# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])


모델을 JSON 파일 형식으로 만들어 저장하기

model_json = model.to_json()
with open("model.json", "w") as json_file : 
    json_file.write(model_json)


Weight를 h5 파일 포맷으로 만들어 저장하기

model.save_weights("model.h5")
print("Saved model to disk")


저장된 JSON 파일로 부터 모델 로드하기

from keras.models import model_from_json json_file = open("model.json", "r") loaded_model_json = json_file.read() json_file.close() loaded_model = model_from_json(loaded_model_json)


로드한 모델에 Weight 로드하기

loaded_model.load_weights("model.h5") print("Loaded model from disk")


모델 컴파일 후 Evaluation

loaded_model.compile(loss="binary_crossentropy", optimizer="rmsprop", metrics=['accuracy'])

# model evaluation
score = loaded_model.evaluate(X,Y,verbose=0)

print("%s : %.2f%%" % (loaded_model.metrics_names[1], score[1]*100))


반응형
반응형

Pleiotropy


  • 하나의 유전자가 여러개의 표현형질에 영향을 줌.  (one gene => n pheynotype)
  • ex) 쥐의 rhino 유전자가 homozygous인 경우 무모 형질과 발톱의 이상신장 형질을 동시에 보인다.


Polygenic Inheritance


  • ploygenic Inheritance이란 여러개의 유전자가 하나의 표현형질의 영향을 주는 현상을 말한다. (n gene => 1 phenotype)
  • 피부색, 키와 같은 phenotype이 대표적인 polygenic inheritance의 예이다.
  • 예를 들어 3개의 유전자가 피부색에 영향을 미친다고 가정해보자. A 유전자, B 유전자, C 유전자.
  • AaBbCc * AaBbCc 의 조합결과 64개의 가능한 조합이 있고, 이를 통해 7개의 phenotype이 형성이된다.
  • 이 phenotype의 분포를 보면 중심극한정리에의해 아래와 같이 정규분포를 나타내게 된다.




반응형
반응형

http://www.htslib.org/download/


위 웹사이트에서 samtools를 다운받고 설치하는 도중에 에러가 출력되면서 설치가 제대로 되지 않는 문제가 있었다.



문제

cd htslib-1.5 && make lib-static
make[1]: Entering directory `/mnt/c/samtools-1.5/htslib-1.5'
gcc -g -Wall -O2 -I.  -c -o cram/cram_io.o cram/cram_io.c
cram/cram_io.c:60:18: fatal error: lzma.h: 그런 파일이나 디렉터리가 없습니다
 #include <lzma.h>
                  ^
compilation terminated.
make[1]: *** [cram/cram_io.o] 오류 1
make[1]: Leaving directory `/mnt/c/samtools-1.5/htslib-1.5'
make: *** [htslib-1.5/libhts.a] 오류 2



해결

apt-get install -y liblzma-dev


반응형

'Domains > Bioinformatics' 카테고리의 다른 글

bam 파일 인덱싱  (0) 2017.08.07
platypus 설치  (0) 2017.08.07
윈도우 우분투에 GATK 설치하기  (0) 2017.06.24
non-coding RNA는 어떻게 만들어지나?  (0) 2017.05.28
tRNA란 무엇인가?  (0) 2017.05.25
반응형

TF-IDF를 통해 sentence classification 해보기


/* 2017.7.7 by 3months.*/


TF-IDF 는 TF/DF 이며, TF(Term Frequency)와 DF(Document Frequency)는 아래와 같이 정의된다.


TF : 현재 문서에서 단어 A가 나타난 횟수

DF : 모든 문서에서 단어 A가 나타난 총 횟수


예를 들어 문서1에서 Mars라는 단어가 3회 나타났고, 모든 문서를 통틀어서 5번 나왔다고 하면

TF-IDF 값은 3/5 = 0.6이다.


문서1에서 Have라는 단어가 100회 나타났고, 모든 문서를 통틀어서는 100000번 나왔다고 하면

TF-IDF 값은 100/100000 = 0.001 이다.


이러한 방식으로 어떠한 단어에 대한 TF-IDF 값을 통해 문서를 feature화 할 수 있고, 이것은 특정 단어의 상대적인 빈도를 나타내주는 값이므로 합리적으로 그 문서를 나타낼 수 있는 feature가 된다.


TF-IDF 모델로 sentence classification


from sklearn.feature_extraction.text import TfidfVectorizer
sentences = ['This is the first document.',
              'This is the second document.',
              'And the third one.',
              'Is this the first document?']
vect = TfidfVectorizer()
X = vect.fit_transform(sentences)
X.todense()


위와 같이 4개의 문장이 있다고 해보자. 그러면 sklearn 라이브러리에서 제공하는 함수를 통해 이를 tfidf vector로 만들 수 있다. 각각의 sentence에 이것을 적용하면 결과 X는 매트릭스가 될 것이다.


y = [1,2,3,4]


위와같이 label을 임의로 정의해보자.


from sklearn.linear_model import SGDClassifier
model = SGDClassifier(loss='logloss')
model.fit(X, y)


tf-idf vectorization을 통해 sentence의 feature를 정의했으면 다시 sklearn의 라이브러리를 이용해 classifier를 만들고, 적합을 시키면된다. 여기서는 SGDClassifier (Stochastic Gradient Descent)라는 linear classifier를 사용하였는데, 아무 classifier나 사용해도된다. (ex LogisticRegression 등등)


X_pred = vect.transform(['My new document third'])

y_pred = model.predict(X_pred)


이제 테스트 데이터를 위와 같이 정의하고 구축한 모델로 예측해보자.


print y_pred


결과

[3]


구축한 모델은 해당 문장을 3번으로 분류했다. third라는 단어가 포함돼서 그런 것 같다. 만약 테스트 데이터에 second라는 단어나 first를 포함시켜보면 모델이 다른 label로 분류한다는 것을 확인할 수 있다.


반응형
반응형

/* 2017.7.7 by 3months */


Vectorization : Low Rank Matrix Factorization

* Coursera의 앤드류 응 교수님의 강의를 머신러닝을 보고 요약한 것입니다. 스스로 공부를 하면서 정리를 한 것이기 때문에 내용 설명이 세세하지 않을 수 있으니 참고해주십시오.



영화 A와 영화 B가 비슷하다는 것을 어떻게 판단할 수 있을까?


위와 같은 영화-사용자 테이블에서 주어진 rating들을 Y라는 matrix form으로 나타내어보자.


또 predicted rating, 즉 rating에 대한 예측값을 위와같은 matrix form으로 쓸 수 있다. 여기서 는 i번 째 사용자의 파라미터 벡터이고

는 j번째 영화에 대한 feature 벡터이다. 예를들어 위 matrix의 1행 1열은 1번 째 사용자 1번째 영화에 대해 내린 rating의 예측값이다.



위의 predicted ratings matrix는 사용자 파라미터 매트릭스 A와 영화 feature 매트릭스 B로 분해할 수 있다.


A = [ - theta1 -

 - theta2 -

 - theta3 -

- ....  -

 - thetan -]


(예를 들어, theta1은 유저1의 사용자 파라미터 벡터)


B = [- x1 -

- x2 -

- x3 -

- ... -

- xm -]


(x1은 영화1의 feature 벡터)


그러면 가 predicted ratings matrix가 된다. 이처럼 매트릭스를 A, B로 분해하는 것을 low rank matrix factorization이라 한다. Optimization을 통해 B 매트릭스를 얻을 수 있고, 최종적으로 i번째 영화의 feature vector인 를 얻을 수 있다. = [x1, x2, x3 ... xn] 으로 나타낼 수 있고 예를 들어, x1 = action, x2= romance, x3 = comedy ... 와 같이 생각해볼 수 있다. 그러면 영화i와 영화 j와 연관되어 있다는 것은 어떻게 알 수 있을까? 그러면 영화 i를 좋아하는 사용자에게 영화 j를 추천해줄 수 있을 것이다.  가장 편리한 measure은 바로 두 벡터의 distance인 이다. 이 값이 작을 수록 두 영화가 비슷하다고 판단할 수 있다.





반응형
반응형

Collaborative Filtering 기초


/* 2017.7.5 by 3months */



 Movie

 Alice

 Bob

 Carol

 Dave

 x1(romance)

x2(action)

 Love at last

 5

 5

 0

 0

?

?

 Romance Forever

 5

 ?

 ?

 0

 ?

?

 Cute puppies of love

 ?

 4

 0

 ?

?

?

 Nonstop car chases

 0

 0

 5

 4

 ?

 ?

 Swords vs. karate

 0

 0

 5

?

 ?

 ?


앞서 contents based approach에서 movie와 user로 이루어진 위와 같은 평점 테이블에서 x1, x2를 알아내기 어렵다는 것을 알았다. (왜냐하면 이 영화가 얼마나 로맨틱한지 얼마나 액션 영화인지 일일이 보고 평가를 내리는 것은 어렵기 때문이다.) 그런데 각 유저들의 feature에 대한 파라미터들을 이미 알고있다고 가정하면 어떨까? 예를 들어 parameter(alice) = [0 5 0], parameter(bob) = [0 5 0], parameter(carol) = [0 0 5], parameter(dave) = [0 0 5] 라고 하자. 그러면 Love at last의 feature은 대략 x0=1, x1 = 1, x2 = 0 라는 것을 알 수 있다. Alice를 예로 들어보면 [0 5 0][1 1 0] = 5 이라서 love at last의 rating이 5가 된다. 이처럼 각 유저들의 parameter들을 안다면 같은 방식으로 다른 영화들의 feature 값을 알아낼 수 있다.





그러므로 위와 같은 optimization 과정을 통해 콘텐츠의 feature vector인 x(i)를 알아낼 수 있다.


정리하면 contents based approach는 콘텐츠의 feature를 통해 유저의 파라미터를 알아내서 이를 통해 rating을 예측하는 것이고, 앞서 설명한 방식은 이와 반대로 유저의 파라미터를 통해 콘텐츠의 feature를 알아내서 이를 통해 rating을 예측하는 것이다. 이는 마치 닭이먼저냐 달걀이 먼저냐와 같은 문제가 된다. 유저의 파라미터를 알면 콘텐츠의 feature를 알 수 있고, 콘텐츠의 feature를 알면 유저의 파라미터를 알 수 있다. 실제로 할 수 있는 것은, random 하게 유저의 파라미터(theta)를 설정하는 것이다. 그리고 이를 통해 콘텐츠의 feature (x)를 추정하고 이를 통해 다시 theta를 설정하고, 다시 x를 설정하는 과정을 반복적으로 수행한다. 이것이 바로 collaborative filtering의 기초적인 아이디어이다.



반응형
반응형
Recommendation System, Contents Based Approach


/* 2017.7.5 by 3months. */


앤드류 응 교수님의 Coursera 머신러닝 강의를 정리한 포스팅입니다.


예 : 영화 평점 예측하기


Movie 

 Alice

Bob

Carol

Dave

 Love at last

 5

 5

 0

 0

 Romance Forever

 5

 ?

 ?

 0

 Cute puppies of love

 ?

 4

 0

 ?

 Nonstop car chases

 0

 0

 5

 4

 Swords vs. karate

 0

 0

 5

 ?


Notation



출처: http://3months.tistory.com/141 [Data Science & Personalized Medicine]

예 : 영화 평점 예측하기


Movie 

 Alice

Bob

Carol

Dave

 Love at last

 5

 5

 0

 0

 Romance Forever

 5

 ?

 ?

 0

 Cute puppies of love

 ?

 4

 0

 ?

 Nonstop car chases

 0

 0

 5

 4

 Swords vs. karate

 0

 0

 5

 ?


Notation



출처: http://3months.tistory.com/141 [Data Science & Personalized Medicine]

예 : 영화 평점 예측하기


Movie 

 Alice

Bob

Carol

Dave

 Love at last

 5

 5

 0

 0

 Romance Forever

 5

 ?

 ?

 0

 Cute puppies of love

 ?

 4

 0

 ?

 Nonstop car chases

 0

 0

 5

 4

 Swords vs. karate

 0

 0

 5

 ?


Notation



출처: http://3months.tistory.com/141 [Data Science & Personalized Medicine]

예 : 영화 평점 예측하기


Movie 

 Alice

Bob

Carol

Dave

 Love at last

 5

 5

 0

 0

 Romance Forever

 5

 ?

 ?

 0

 Cute puppies of love

 ?

 4

 0

 ?

 Nonstop car chases

 0

 0

 5

 4

 Swords vs. karate

 0

 0

 5

 ?


이러한 영화 평점 테이블에서 missing value(?) 을 예측하는 것이 recommendation system의 목적이다. 그렇다면 어떻게 평점을 예측할 수 있을까? 한 가지 방법은 바로 Content Based Recommendation Approach이다.


 Movie

 Alice

 Bob

 Carol

 Dave

 x1(romance)

x2(action)

 Love at last

 5

 5

 0

 0

0.9

 0

 Romance Forever

 5

 ?

 ?

 0

 1.0

 0.01

 Cute puppies of love

 ?

 4

 0

 ?

 0.99

 0

 Nonstop car chases

 0

 0

 5

 4

 0.1

 1.0

 Swords vs. karate

 0

 0

 5

?

 0

 0.9


다음과 같이 영화에 대한 feature가 있다고 가정하자. x1은 romance 장르의 정도를 나타낸다. 그러면 Love at last에 대한 feature vector x_1 = [1 0.9 0] 이라고 하자. (첫번째 원소인 1은 interceptor feature이다.) Romance Forever의 feature vector을 x_2이라하면 x_2 = [1 1 0.01] 이라고 할수 있다.


그러면 이를 linear regression으로 풀 수 있다. 각 사람마다 parameter 3개가 있다고 보고 이 파라미터를 러닝하면된다. 그리고 종속변수는 rating이다. 만약 alice의 파라미터인 parameter(alice) = [0 5 0] 이라고 가정한다면, alice의 cute puppies of love에 대한 평점의 예측값은 [0 5 0][1 0.99 0] = 4.95이다. 지금은 그냥 파라미터값을 임의로 정한 것이지만 이 파라미터들을 러닝할 수 있을 것이다.


이렇게 Contents의 속성을 통해 rating을 예측하는 방법을 contents based recommendation system이라 한다. 이러한 contents의 속성별로 유저가 각각의 속성에 대응하는 파라미터를 가지고 있다고 보면 되는 것이다.




수식으로 표현하면 위와 같다. 우리의 목적은 데이터를 통해 유저마다 존재하는 파라미터를 학습하는 것이다. 이 파라미터와 영화 속성값과의 내적값을 통해 rating을 구할 수 있다.  또한 user j의 평가한 영화의 갯수 m(j)를 regulariztion term에 넣어서 활용할 수 있다. (데이터가 적은 사람은 overfitting을 방지하기 위해 더 regularization한다.)





파라미터 학습 방법은 위와같은 squared error을 최소화 시키면된다. 또한 overfitting을 방지하기 위해 regularization term을 넣어줄 수도있다. 이를 위해서 mle 같은 통계적인 모수 추정방법을 사용할 수 있지만 머신러닝에서는 gradient descent 방법을 일반적으로 사용하여 구하게 된다. gradient descent 방법에서는 iteration을 돌면서 파라미터들을 변경시켜 오차값을 줄이는 방식으로 동작한다.


contents based approach의 단점은 영화나 책에 대하여 feature를 알아내는 것이 어렵다는 것이다. 이 영화가 얼마나 로맨틱한지 얼마나 액션영화인지 그 정도를 수치화해서 feature로 정의하는 것은 간단하지 않다.


반응형
반응형

앤드류 응 교수님의 Coursera Machine Learning 강의를 정리한 포스팅입니다.


추천시스템은 머신러닝 분야의 중요한 응용 분야중의 하나이다. 많은 실리콘 밸리 회사들이 더 좋은 추천 시스템을 만들기 위해 노력하고 있다. 아마존, 넷플릭스 등등의 회사들이 웹 사이트에서 이러한 추천 시스템을 활용하고 있다. 이러한 추천 시스템은 이러한 회사들이 더 좋은 수익을 올릴 수 있도록 도와준다. 그러므로 추천 시스템의 성능을 개선하는 것은 기업의 이익에 큰 영향을 미친다. 추천 시스템 분야는 학계보다는 산업계에서 더 선호되는 분야라고 한다.


예 : 영화 평점 예측하기


Movie 

 Alice

Bob

Carol

Dave

 Love at last

 5

 5

 0

 0

 Romance Forever

 5

 ?

 ?

 0

 Cute puppies of love

 ?

 4

 0

 ?

 Nonstop car chases

 0

 0

 5

 4

 Swords vs. karate

 0

 0

 5

 ?


Notation


n_u = no.users. (= 4)

n_m = no.move (= 5)

r(i,j) = 1 if user j has rate movie i (rating을 한 경우 1로 정의)

y(i,j) = rating given by user j to movie i (only if r(i,j) = 1) (movie i가 user j 에게 받은 평점)



?은 아직 영화를 보지 않고, 평점을 내리지 않은 것이다. 이를 예측하는 것이 바로 기본적인 추천 시스템의 목적이다.



반응형
반응형

/* 2017.7.2 */


Universal Approximation Theorem


Universal Approximation Theorem이란 1개의 히든 레이어를 가진 Neural Network를 이용해 어떠한 함수든 근사시킬 수 있다는 이론을 말합니다. (물론 활성함수는 비선형함수여야합니다.) 재미로 1개의 히든 레이어를 가진 신경망 모델로 실제 함수를 근사시킬 수 있는지 확인해보았습니다.


import numpy as np
%matplotlib inline
import matplotlib.pyplot as plt
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
from keras import optimizers
import math

우선 필요한 라이브러리를 임포트합니다.


x = np.linspace(-10, 10, 100)
y = 3*np.sin(x)*np.cos(x)*(6*x**2+3*x**3+x**1)*np.tan(x)

제가 근사시키고 싶은 함수는 위와 같습니다.

y = 3sin(x)cos(x)(6x^2+3x^3+x)tan(x) 라는 함수인데 그냥 생각나는대로 만든 함수입니다.




이 함수의 모양은 이렇게 생겼습니다. Universal Approximation Theorem은 신경망 모델로 이러한 복잡한 함수도 근사시킬 수 있다는 이론인데 한 번 확인해보겠습니다.


우선 여러개의 히든 레이어를 가진 신경망 모델로 확인해보겠습니다.



Multi layer perceptron

model = Sequential()
model.add(Dense(10, input_shape=(1,), activation='relu'))
model.add(Dense(10, input_shape=(1,), activation='relu'))
model.add(Dense(10, input_shape=(1,), activation='relu'))
model.add(Dense(10, input_shape=(1,), activation='relu'))
model.add(Dense(1, activation='linear'))
rms = optimizers.RMSprop(lr=0.01, rho=0.9, epsilon=1e-08, decay=0.0)
model.compile(loss='mean_squared_error', optimizer=rms, metrics=['accuracy'])
model.fit(x, y, epochs=3000)


위와 같은 4개의 히든 레이어로 구성된 신경망 모델을 만들고 RMSProp optimizer을 통해 학습하였습니다. 학습된 모델로 구현된 함수는 아래와 같이 생겼습니다.


prediction = model.predict(x) plt.plot(x, prediction) plt.show()




조금 다른 부분도 있지만 잘 근사한 것을 확인할 수 있습니다. 사실 처음에는 adam optimizer을 사용하였는데, loss 한계점 아래로는 떨어지지가 않았습니다. 그래서 learning rate를 조절할 수 있는 rmsprop optimizer을 이용하였고, learning rate를 다양하게 변화시켜가면서 위와 같은 hyperparameter일 때 가장 잘 학습하는 것을 확인하였습니다.



Singlel hidden layer perceptron

model = Sequential()
model.add(Dense(10000, input_shape=(1,), activation='relu'))
model.add(Dense(1, activation='linear'))
rms = optimizers.RMSprop(lr=0.06, rho=0.9, epsilon=1e-08, decay=0.0)
model.compile(loss='mean_squared_error', optimizer=rms, metrics=['accuracy'])
model.fit(x, y, epochs=5000)


진짜 universal approximation theorem은 "단 한 개"의 히든레이어로도 이런 것을 할 수 있다는 것이기 때문에 한 개의 히든 레이어만 가지고 함수를 근사시켜보겠습니다. 무려 10000개의 node를 갖는 1개의 히든레이어를 5000 epochs 을 돌려서 다음과 같은 근사함수를 만들어냈습니다.




위의 multi layer perceptron 보다는 못하지만 어느정도 근사할 수 있다는 것을 확인할 수 있었습니다. 노드수, learning rate, optimizer 등을 바꿔가면서 해보면 더 잘 함수를 근사시킬 수 있을 것입니다.



반응형
반응형