BLOG main image
LEEEJONG (165)
IT (53)
주관적평가 (31)
창작공간 (80)
110,079 Visitors up to today!
Today 50 hit, Yesterday 63 hit
daisy rss
tistory 티스토리 가입하기!
2017.09.10 15:35



세미나에서 여러 팀이 발표할때 발표의 구조는 대략 비슷했다.


1. Motivation

- 나는 이걸 평소에 하고있었는데 이게 궁금해졌다.

2. Model

- 이를 모델링하기 위해 나는 RNN을 썼다 or DNN? CNN을 썼다.

3. 학습 Struggling 

- 이를 학습을 1주일시키고 했던 결과는 이렇고 그래서 모델을 바꿨다.. 혹은 학습을 더 시켰더니 이렇게 변했다.

4. 결과

- Heres our masterpiece...

- Please visit our git page.



보통 이런 구조로 얘기가 흘러간다.


그런데 여기서 확 짜증이 나는 포인트는 

2. 모델링 부터다.


우선 내가 RNN, CNN, DNN이게 뭔지 몰랐다.


대부분 발표팀이 RNN을 썼던건 기억나는데 그게 나오고나서 바로 모델을 짠 수학공식이 나온다.


여기서부터 멘붕이 왔기때문에 이부분부터 정복해 나가기로 한다.



우선 CNN RNN DNN은 Wikipedia 문서 중 Deeplearning 파트에서 찾을 수 있다.


일단 출발자체가 DL까지 진출했다는건 알 수 있다.

이제 각각이 무엇인지 학습해본다.


우선 뒤에 붙는 NN은 Neural Network라는뜻이다.

신 경 망


ANN이 단어의 출발이다 Artificial Neural Network ANN

DNN은 Deep Neural Network DNN



일단 인공신경망부터 정복하고 간다.


인공신경망(人工神經網, 영어: artificial neural network, ANN)은 기계학습과 인지과학에서 생물학의 신경망(동물의 중추신경계중 특히 )에서 영감을 얻은 통계학적 학습 알고리즘이다. 인공신경망은 시냅스의 결합으로 네트워크를 형성한 인공 뉴런(노드)이 학습을 통해 시냅스의 결합 세기를 변화시켜, 문제 해결 능력을 가지는 모델 전반을 가리킨다. 좁은 의미에서는 오차역전파법을 이용한 다층 퍼셉트론을 가리키는 경우도 있지만, 이것은 잘못된 용법으로, 인공신경망은 이에 국한되지 않는다.


뇌를 따라한 인간이 만든 "통계학적 학습 알고리즘"

인간은 뉴런이 학습을 통해 시냅스의 결합 세기를 변화시켜 문제 해결 능력을 갖게 된다.

이걸... 따라해서 입력과 출력 사이에 여러 개의 인공 막? layer?를 만들어두고 like 시넵스  (인공뉴런) 이 결합 세기를 갖고있고 이를 통해 문제 해결 능력을 갖게 되는걸 ANN이라고 부른다.



올ㅋ


혼란이온다

이걸 읽고 딥러닝으로돌아왔는데

DNN은 ANN에서 입력과 출력 사이에 여러 개의 Hidden Layer로 이뤄진 ANN이라고 한다.


ANN을 다시 이해해야겠다.


 인공신경망은 시냅스의 결합으로 네트워크를 형성한 인공 뉴런(노드)이 학습을 통해 시냅스의 결합 세기를 변화시켜, 문제 해결 능력을 가지는 모델 전반을 가리킨다.


핵심은 이렇다. 시냅스 즉 인공뉴런들의 조합으로 만들어진 신경망 조직을 ANN이라고 부르고 DNN은 입력과 출력 사이에 Hidden Layer를 사용한 방식을 얘기하는거 같다.


그니까 여러 Layer 혹은 시냅스 혹은 인공뉴런들이 Connection을 갖고있고 그걸통해 문제를 해결하면 ANN인거다.


자 그럼이제 CNN


Convolutional Neural Network

합성곱???



티스토리 딥빡... 사진도 못올리게해 사진업로더를 왜 플래시로만드냐 ㅡㅡ...


여튼 Convolutional은 소용돌이치는 나선의.. 이런뜻이다.


CNN은 다계층 Perceptrons의 한 종류이다.

대박 이제 가닥이 나온다.



각 노드의 가중치를 곱하든 더하든 어떻게 해서 맞으면 1 틀리면 -1을 리턴하는 인공신경망 이름이 퍼셉트론이다.

CNN은 그 중 하나인데

CNN은 하나 또는 여러개의 합성곱 계층과 그 위에 올려진 일반적인 인공 신경망 계층들로 이루어져 있으며, 가중치와 통합 계층(pooling layer)들을 추가로 활용한다. 이러한 구조 덕분에 CNN은 2차원 구조의 입력 데이터를 충분히 활용할 수 있다. 다른 딥 러닝 구조들과 비교해서, CNN은 영상, 음성 분야 모두에서 좋은 성능을 보여준다. 


CNN은 하나또는 여러개의 합성곱 layer가 있고 최소한의 전처리를 하도록 설계되어 있다고 한다.

자세한 내용은 관심이 없고 얘들은 2D형태의 데이터 처리에 효과적이며 쉽게 훈련되고 적은 수의 매개변수를 사용한다고 한다.


뭐 그렇다고 하는군.. 괜찮은 ANN인가봐


자 그럼이제 다음 RNN

Recurrent neural network

순환 신경망

이놈의 특징은 아래와 같다고 한다

순환 신경망은 앞먹임 신경망과 달리, 임의의 입력을 처리하기 위해 신경망 내부의 메모리를 활용할 수 있다. 이러한 특성에 의해 순환 신경망은 필기체 인식(Handwriting recognition)과 같은 분야에 활용되고 있고, 높은 인식률을 나타낸다


그니까... 재귀함수처럼 얘는 인풋이 아웃풋으로 갈때 그냥 쭉쭉 가고 끝나는게아니라

지네들이 계산을 할때도 내부에있는 뉴런을 사용할 수 있다는 점이 특징인거 같다.

이야 이제 좀 인공신경망 인공지능 같아지네


좀더읽어보자.

순환 신경망을 구성할 수 있는 구조에는 여러가지 방식이 사용되고 있다. 완전 순환망(Fully Recurrent Network), Hopfield Network, Elman Network, Echo state network(ESN), Long short term memory network(LSTM), Bi-directional RNN, Continuous-time RNN(CTRNN), Hierarchical RNN, Second Order RNN 등이 대표적인 예이다. 순환 신경망을 훈련(Training)시키기 위해 대표적으로 경사 하강법, Hessian Free Optimization, Global Optimization Methods 방식이 쓰이고 있다. 하지만 순환 신경망은 많은 수의 뉴런 유닛이나 많은 수의 입력 유닛이 있는 경우에 훈련이 쉽지 않은 스케일링 이슈를 가지고있다.



여러 종류가 있다는거같고 훈련이 쉽지않은 이슈가 있는데 이걸 응용한 ESN, CTRNN, HRNN SORNN, 등등 재귀호출을 하는 신경망 모델이 이 분야에 많은것으로 보인다.


이 뒤에 제한 볼츠만 머신 (RBM), 심층 신뢰 신경망 (DBN), 심층 Q 네트워크  등이 있는데

난 이정도만 알고있으면 될거같다.



RNN CNN 얘기는 여기서 마무리하고 다음 학습을 이어가도록 한다.

Name
Password
Homepage
Secret
2017.09.09 00:42


1. Android animation

코드로 애니메이션을 만드는법


내가지금 쓸거는 TrnaslateAnimation인데 간단하게 new TrnaslateAnimation(0,0,0,100) 이런식으로 만들어서

setDuration 으로 동작시간 정하고

setFilterAfter? 이거로 동작후에거기 멈추라고 하면 된다.


근데 내가 만들 애니메이션은 복합 동작이다

먼저 아래로 움직이고 그 후 우측으로 움직인다.


그러려면 TranslateAnimation이 두번들ㅇㅓ가야되는데 그러려면


AnimationSet 이란 객체를 만들고 거기다 때려박으면 된다.


여기 내가쓴 예제를 올린다


_tvTarget = (TextView)findViewById(R.id.tv_target);


AnimationSet animSet = new AnimationSet(true);

TranslateAnimation downAnim = new TranslateAnimation(0,0,0,200);
downAnim.setStartOffset(1000);
downAnim.setDuration(2000);
TranslateAnimation rightAnim = new TranslateAnimation(0,200,0,0);
rightAnim.setStartOffset(3000);
rightAnim.setDuration(2000);

animSet.addAnimation(downAnim);
animSet.addAnimation(rightAnim);
animSet.setFillAfter(true);

_tvTarget.startAnimation(animSet);



올ㅋ 복사했더니 css까지 같이복사되네 신기방기


여튼 이런식으로 하면 된다.


2. 아이폰 레이아웃잡기


그 간단하게뷰 만들고 붙이는건 이래하면 된다


let textView = UITextView(frame: CGRect(x: 0, y: 0, width: 500, height: 500))

        

        textView.text = “hihi”

        textView.center = self.view.center

        textView.textAlignment = NSTextAlignment.justified

        textView.textColor = UIColor.blue

        textView.backgroundColor = UIColor.lightGray

        

        self.view.addSubview(textView)



근데 이렇게작업하면 하루죙일걸릴거같아서

UI를 그리는 xib파일을 만들고 그걸 가져다 붙이는걸 찾았다

let myView2 = UINib(nibName: "myView", bundle: nil).instantiate(withOwner: nil, options: nil)[0] as! UIView


        

        self.view.addSubview(myView2)


xib이쁘게만들고 이렇게 subview 붙이면 이렇게 예쁘게 된다.


근데 생각해보니 이걸 가져온걸.. outlet을 만들어줘야되는데 이건 어떻게하지??

일단 몇개 읽어보니 fileOwner를 꼭 설정해주라고 하고


수동으로 하면 되는거같다.


근데 이건 해봐야겠다.


이상 오늘정리끝

Name
Password
Homepage
Secret
2017.09.05 18:00


Objective C 코드를 보다보니 말도안되는 Syntax가 많이 보인다.


그중 제일 이해안되는 [] 대괄호에 대해 고수분들께 문의했고

오늘 배운것을 정리해본다.


일단 예제소스를 써보자

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(23,28,258,20) ];



이게 문제의 출발이다

이 말도안되는 소스는 대체 무엇인가

일단 여기서 왼쪽절은 titleLabel이라는 UILabel 포인터 변수를 선언한거다. 여기까지는 소양



우측 UILabel alloc 은 내가 알고있는 객체지향 개념으로는 new라고 보면 된다고 하셨다.

메모리를 할당해야 그 포인터 주소가 나오니까 그걸 alloc (메모리할당) 한거다.


그럼 그렇게 나온 놈한테 initWithFrame을 한거로 봐야한다.


나눠보면

UILabel *titleLabel = [UILabel alloc];

[titleLabel initWithFrame:CGRectMake(23,28,258,20)];


이렇게 나뉘어진다.


그래 위에문장은 그렇다고 치자 뭐 완벽하게 이해되는건 아니지만


그럼 아래문장에 대괄호는 왜친건데?


라고 질문이 출발하니


그에대한 답은 '메시지'의 개념을 이해해야 한다고 하셨다. 그리고 [] 대괄호로 묶는건 인자? 라고 봐야된다고도 하셨다.


titleLabel이라는 놈한테 initWithFrame[] 을 한거다

내가 아는 문법으로 바꾸면

titleLabel.initWithFrame()


이렇게 바꿀수 있다는거다.


CGRectMake()를 해서 나온 사각형을 initWithFrame에 보내고 그걸 할당한 UILabel 포인터변수에 넣은거다.


음.. 정리를 해도 말로 표현이 잘 안되는데 이 그지같은 형태의 근원은


우리가 갖고있는 일반적인 개념으로는 각 객체의 함수를 실행시킨다. 라는 생각을 갖고있는데


C에서는 우린 그 일을 수행할 놈한테 메시지를 보내고, 그 처리는 그쪽에서 알아서 하게 한다... 메시지를 보낸다는 부분이 포인트다.


이게 큰 차이점이라고 한다.


자 결론

[] 대괄호는 파라미터를 보내는거 정도로 기억해라 like ()




그럼 적용을해보자


[self addSubView:mMyVariable];


이놈을 해석하면

self.addSubView(mMyVariable); 


이렇게 되는거다




번외편


- (id)initWithFrame:(CGRect)frame withInfo:(Weather *)info

{

//BlahBlah

return self

}



뭐 이런 함수


젤 위에보면 -가 붙는데

-는 보통 함수같은데 쓰고 가끔보이는 +는 static 함수 같은데 쓰인다고 한다.

대충 난 -만 쓰면 될거같다.


(id)를 리턴하는 initWithFrame함수인데 인자로 CGRect타입의 frame과 withInfo라는이름의 Weather 포인터 info를 받는다.


뭐 이정도로 봐야될거같다.


[]를 할때 변수가 하나만있으면 땡땡이: 콜론 을 생략하는 이상한 요상한 법칙이 있다고 한다.


일단 오늘은 여기까지 정리하고 넘어간다.

Name
Password
Homepage
Secret

티스토리 툴바