본문 바로가기

전체보기256

Eigenvalue, Eigenvector, PCA, SVD # 아이겐 벡터와 아이겐 벨류의 의미 : 3*3으로된 행렬에 일련의 값들이 들어있다고 하자. 이 값들은 3차원 공간상에 점들로 표현될 수 있다. 그런데 만약 이 점들에 전부 x,y위에만 존재한다면, 이는 사실 x,y 2개의 차원만으로 표현될 수 있는 데이터였던 것이다. 이러한 n*n행렬에서의 핵심 차원을 알아내는 것이 바로 아이겐 벡터와 아이겐 벨류이다. # 정의 : 임의의 정방행렬(n*n) A에대해, AB=λB를 만족하는 (단, B는 0이 아닌 벡터) B를 eigenvector, 상수 λ를 eigenvalue 라고 한다. - 직관적 해석 : A라는 행렬에 벡터 B를 곱하여 선형 변환(프로젝션)시켰을 때, B 벡터가 그리는 직선(상수 λ가 미지수이므로)위에 행렬 A가 놓여지는 것을 의미한다. 즉, 임의의.. 2014. 7. 18.
RNN 학습 알고리즘, BPTT BPTT(Backpropagation Through Time) : RNN의 recurrent한 부분을 시간에 대해서 펼치면 2개의 feedforward neural network로 이루어진 구조로 생각할 수 있다. 이렇게 리커런트 노드를 time step에 대해 k 번만큼 펼친 다음, 그대로 백프로퍼게이션 알고리즘을 적용한다.이 때 한가지 헷갈리는 점은, 시간에 대해 펼친 recurrent layer가 각 layer마다 동일한 weight를 가져야한다는 조건이다. 이부분이 조금 어려운데 사실은 하나의 리커런트 엣지를 인위적으로 시간에 대해 펼쳐서 해석한 것이기 때문에, 실제로 모든 layer는 같은 edge인 것이라 weight가 같아야 한다.따라서 똑같이 forward pass로 activation값을.. 2014. 7. 8.
Naive Bayse, Bayesian Network, HMM Naive Bayse : bayes theorem 에 모든 변수들이 C라는 클래스에대해 conditionally independent 라고 가정하고 모델링 한것. 위 그림에서처럼 단순한 구조로만 모델링이 됨. Bayesian Network(=bayesian belief network, belief network) : bayes theorem 에서 변수들간에 다양한 conditionally independent이 존재한다고 가정하고 모델링 한 것. 위 그림에서처럼 복잡한 구조가 모델링 될 수 있음.DBN = deep BN conditionally independent 조건을 많이 가정할 수록 계산해서 구해야하는 확률 변수의 개수를 확 줄일 수 있다. HMM(Hidden Markov Model) : 은 BN.. 2014. 7. 7.
CUDA / CuDNN / Theano / TensorFlow 설치하기 Ubuntu 14.04 LTS에서 GPU 컴퓨팅을 위한 기본적인 설치 방법이다. 만약 거의 아무것도 설치하지 않은 방금 깐 unbuntu 라면 바로 1, 2, 3번만 설치한 후 7번 항목으로가서 글을 읽기를 활용할 것을 추천한다.(이 방법은 모든 딥러닝 라이브러리를 한 번에 사용할 때 유용함)그렇지 않고 기존에 사용하던 서버에서 추가적인 설치가 필요한 경우나, 아니면 선택적으로 딥러닝 라이브러리를 사용할 경우 나머지 항목을 참조하기 바란다. - 본 글은 2017.3월 현재 최신 버전의 설치 방법을 정리하였다. 0) GPU device의 CUDA 지원 유무확인lspci | grep -i nvidia 또는 sudo lshw -C display 명령어로 내 GPU 장치를 확인하고, https://develop.. 2014. 7. 7.
Ubuntu - Screen , zip, tar 사용법 Screen vs tmux 새로 개발된 tmux가 좋을까? 오래 동안 사용된 screen이 좋을까? 처음엔 새로 나온 tmux가 무조건 더 좋을 거라고 생각했으나, 오히려 반대로 생각하는 사람들도 많이 있었다. 아주 오랜시간 서버 백엔드에서 검증되고 사용된 screen이 더 안정적이라는 것이다. 그래서 나도 tmux보단 원래부터 익숙하게 쓰던 screen을 계속 쓰고 있다. Screen 세션에서 한글입출력이 필요한 경우 screen -SU: 반드시 세션을 생성할 때, -U 옵션을 주어야만 utf-8을 인식할 수 있다. Screen 사용법 - screen: screen은 세션을 만드는 역할이고, session이란 기존의 bash에서 한 layer 더 깊게 들어가는 구조이다. 하나의 screen을 만들면 독.. 2014. 7. 7.
딥러닝과 FIR, IIR, LPF, HPF, BPF Impulse responseImpulse response(IR), 혹은 impulse response function(IRF)라고 불리운다. 좀 더 직관적인 의미는 후자가 더 와닿는다. 이는 쉽게 말하면 어떠한 신호를 처리하는 system이 있을 때, input signal을 받아서 어떻게 output signal로 변형시키는지에 대한 함수(시간에 대한 함수)를 가리키는 말이다. 만약 우리가 어떤 공연장의 IR 데이터를 갖고 있으면, 어떠한 소리든지 그 공연장에서 나오는 소리처럼 변형시킬 수 있게 된다. # 용어 - Impulse: input signal을 의미함 - response: output signal을 의미함 Impulse(unit impulse)출처: https://en.wikipedia.o.. 2014. 7. 1.
Markov Chain, Markov Matrix Markov Chain(MC) : 메모리를 갖지않는, 즉 직전 상태에의해서만 다음상태가 결정되는 이산적 시간에따른 확률적인 변화 모델 그냥 Markov Chain 은 Markov Matrix를 적용하는 방법을 의미한다고 이해할 것. Markov Matrix가 훨씬 직관적임 (MC의 그래프는 당연히 Markov Matrix 와 1:1 대응되어 표현가능함.) Markov Matrix : 그냥 Markov Chain 을 행렬로 표현 한 것. Markov Chain 은 오히려 Markov Matrix로 이해하는게 더 적합해보임. 단순히 Ut+1 = A*Ut 항 에서의 행렬 A가 바로 Markov Matrix임. (단, row의 합은 1이고, 각 성분은 0보다 같거나 커서 row stochastic matrix .. 2014. 6. 24.
안드로이드 여러가지 팁 - Logcat이 죽어서, adb를 재실행하기 C:\adt-bundle-windows-x86_64-20140321\sdk\platform-tools 경로에서 커맨드창을 열고adb kill-server // 종료adb devices // 실행 - SimpleDateFormat 사용법String timeStamp = new SimpleDateFormat("yyyyMMdd_HH:mm:ss.SSS").format(new Date());http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html - File 생성하기http://arabiannight.tistory.com/47 - 경로 얻어오기String externalPath = Environ.. 2014. 6. 24.
Weka 웨카 3.7 버전대부터 Classifier - More Option - Store Predictions for visualization 옵션이 추가되었다. 또한 package 메니저도 3.7 버전대 부터 추가되었다.(매우 편리함) - percentage split 할 때, more option에서 preserve order를 켜주어야, 랜덤으로 섞어서 학습 하지않는다. - zeroR Classifier 제로 R 클래시파이어는 성능의 baseline을 알아내는 용도의 분류기이다. 이것은 매우 간단하기 training데이터에서 가장 빈도가 높은 class로 target에 있는 모든 데이터를 예측해버린다. 즉 한마디로 제일 빈번한 클래스 한군데로 올인을 하는 것이다. 그래서 속도가 매우빠름. arff 포멧은 .. 2014. 6. 23.
MATLAB 문법, API, 단축키, 환경설정 MATLAB 단축키함수 정의 보기 : 컨트롤 + D, 함수에 우측 클릭해서도 가능스크립트 전체 실행 : F5스크립트 구간별 실행 : 드래그해서 F9 (원하는 부분들만 드래그하여 F9로 실행)컨트롤 엔터 : 해당 섹션만 실행 (섹션은 %%로 구분함) Breakpoint : F12, 왼쪽 라인에 클릭해서도 가능. 그다음 F5로 실행하여 바로 변수값 바로 볼수있고(마우스 커서를 올림), 역시 F10,F11 등으로 스텝 실행 가능 주석 한번에 달기 : Control + R 주석 한번에 지우기 : Control + T자동완성 : TAB 키 MATLAB 환경설정 sig(x,w,b) 하면 계산이 바로 됨.중요한 점은 이렇게 생성한 http://kr.mathworks.com/help/matlab/matlab_prog/.. 2014. 6. 23.
Java, 클래스간 변수 공유 자바에서 클래스간의 데이터 교환 및 변수 공유는 다음 중 하나를 이용한다 1. Static : 최악수, 비 객체지향적임. 가능하면 쓰지 말아야함.2. 싱글톤 : 싱글톤이 적합한 구조일 때 편리함. (클래스가 자기자신을 public static 멤버변수로 갖는다.)3. 멤버변수 : 객체내부에 인스턴스르로 다른 객체를 둔다. 가장 일반적인 방식 (음..레퍼런스에서는 그냥 쓰레드가 돌고있건 말건, service건 무조건 이 방식을 썼네..;)4. 상속 : 클래스를 상속받는다..?5. 내부 통신 : ex)안드로이드 intent의 putextra http://www.androidside.com/bbs/board.php?bo_table=B49&wr_id=46083싱글톤 : http://blog.doortts.com.. 2014. 6. 19.
안드로이드 DB, SQLite 안드로이드 내부의 DB인 sqlite 를 보려면, 컴퓨터로는 볼 수가 없다. (루팅을 해도 data/data 경로에는 usb로는 접근 불가능. 에뮬레이터에서만 가능함.) 따라서 루팅한 안드로이드 폰에서, rootexplorer 로 data/data/패키지명/database 로 들어가야한다. --------- DB 부분 / DatabaseManager.java --------public class DatabaseManager extends SQLiteOpenHelper{ public DatabaseManager(Context context, String name, CursorFactory factory,int version) { super(context, name, factory, version); } /.. 2014. 6. 19.
Python 프로그래밍 # Python의 변수 호출/참조: Call by Objective Reference 대충, call by reference(포인터)랑 비슷한데, 다만 함수안에 전달될 때에는 지역변수 tag가 붙기 때문에 레퍼런스가 사라진다. 또한 List와 같이 mutable한 정보를 담는 자료구조는 indexing을 할 경우 call by reference처럼 행동한다. http://devdoggo.netlify.com/post/python/python_objective_reference/ ## Python에서는 + 와 += 가 다르다. a += b 는 inplace이지만, a = a+b 는 새로운 메모리를 할당한다. https://docs.python.org/3.2/library/operator.html#inpla.. 2014. 6. 17.
정규표현식, 정규식, 엑셀 고급기능 정규표현식(Regular Expression, Regex, 정규식) # 정규식 문법 - https://github.com/google/re2/wiki/Syntax - https://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C_%ED%91%9C%ED%98%84%EC%8B%9D # 복잡한 정규식의 사용에 대해 - 너무 심각하게 복잡한 기능이 필요한 정규식은 쓰지 말고, 그냥 python 프로그래밍으로 해결 하는 것이 훨씬 나은 방법이다. 그러나 정말 어쩔 수 없이 해야만한다면 정규식에 대한 매우 높은 이해도가 필요하다. - Python을 쓴다면, 정규식보다 훨씬 더 구현이 빠르고 정확하며, 디버깅, 유지보수, 협업이 용이해진다. 특히 너무 복잡한 문제에는 가능한 정규식은 사용하지.. 2014. 6. 17.
Excel, Spread Sheet(google), VBA - 함수 구현 : 비어있지 않은 셀의 개수를 센다음, 문자열 L을 붙여서 쓰기="L"&COUNTA($B$2:B6) - 함수 구현 : INDIRECT를 이용해서 특수한 연산 수행=IF(SUM(INDIRECT($Q$11):INDIRECT($Q15)) + INDIRECT(LEFT(Q15,1)&RIGHT(Q15,2)+1)>0.5689, $Q$11, LEFT(Q15,1)&RIGHT(Q15,2)+1)=SUM(INDIRECT($Q$11) : INDIRECT($Q16)) # IF에 And조건 넣기=IF(AND(A 2014. 6. 17.
XNA from Siverlight 방법 주의사항 1. 게임 쪽을 수정한 다음에는 반드시 게임 프로젝트를 빌드하여야만 dll이 갱신되어 올바르게 작동한다. 주의사항 2. 서버를 이용하는 경우 서비스 레퍼런스이름이 실버라이트의 것과똑같아야한다. 왜냐하면 아마도 서비스레퍼런스.클라이언트콘피그 이 파일이본래의 프로젝트의 실버라이트 것만 참조하기 때문인 것 같다. 0. 기존 실버라이트 솔루션에 오른쪽 버튼눌러 add를 클릭하여existing 프로젝트를 눌러 xna 프로젝트를 추가한다. 그리고 기존 실버라이프 프로젝트에 모든 xna레퍼런스를 추가한다. 그리고 system.window 도 추가해준다. 그다음 프로젝트를 카피하여 윈폰으로 만든다음, 원래 윈도우 프로젝트는 지운다. 그다음 컨텐트(정확히 Content라는 이름으로) 폴더를 하나 만든다음, 디버.. 2014. 6. 17.
Perceptron, TLU TLU : Threshold Logic Unit / TLU의 다른이름은 Perceptron, Threshold neuron 이라고 함. input의 합(=weighted summation)이 Threshold 이상이면 1을 출력, 그렇지 않으면 0을 출력하는 유닛. if(Sum(input) => Threshold) return 1; if(Sum(input) 0 {0,1} -> 0 {1,0} -> 0 {1,1} -> 1 OR gate : threshold를 0.5로 잡으면 {0,0} -> 0 {0,1} -> 1 {1,0} -> 1 {1,1} -> 1 XOR gate : threshold를 어떻게.. 2014. 6. 17.
Neural Network의 학습 방법, Gradient Descent, Back-Propagation Gradient descent : 에러를 미분하여 weight를 업데이트 하는 방법. Back-propagation : Hidden node에서 에러를 미분하여 weight를 업데이트 하는 방법. Neural Network 학습 방법 1) Hebbian Learning (Hebbian Rule) 2) Perceptron Rule 3) Gradient Descent (Delta Rule, Least Mean Square) 4) Back propagation 5) 그 이외 응용기법 1) Hebbian Learning 기본 신경망 학습 규칙으로, 원래 무감독 학습 방법에 쓰는 것이었다. * 아이디어 -> 만일 어떤 신경세포의 활성이 다른 신경세포가 활성하는 데 계속적으로 공헌한다면, 두 신경세포 간의 연결 가.. 2014. 6. 17.
Activation Function - Sigmoid 함수 (시그모이드 함수) 대표적인 활성 함수(Activation Function)이다. 뉴럴넷에서 Activation Function 이란, x=Weighted Sum 에대해, y=F(x) 로 output y를 다음 레이어로 보내는 함수 F를 의미한다. 단순히 계단식으로 활성화 함수를 사용할 경우, output이 무조건 0과 1로만 나와, 미분이 불가능하고, 중간 값이 존재하지 않는다.그러나 시그모이드 함수를 쓸 경우, output을 0과 1만이 아니라 [0,1]의 범위로 feature를 나타낼 수 있다. 여기서 분자분모에 e^x 를 곱하면로 바꾸어 표현할 수 있다.(두 표현 다 자주 쓰임) 정확히 이런 모양을 가진 함수를 Sigmoid 함수라고 부름.(logistic 함수라고도 부름).. 2014. 6. 12.
디자인 패턴(Design Pattern) 좋은 코딩이란어렵게 생각할 것 전혀 없다. 그냥 아래의 원칙에 맞게 합리적으로 잘 짜면 된디. 필자는 전략 패턴이나 팩토리 패턴이 뭔지도 몰랐는데, 그냥 계속해서 리팩토링을 하다보니 본능적으로 만들어서 쓰고 있었다.(물론 그 문법은 매우 원시적이었지만) 1. 리팩토링을 자주해서 끊임없이 코드의 중복을 제거한다.2. 처음보는 사람도 쉽게 이해할 수 있도록 코드를 잘 정리 정돈한다.3. 계속해서 더 나은 구조를 고민한다. 싱글톤(Singleton Pattern)class SingletonInstance: __instance = None @classmethod def __getInstance(cls): return cls.__instance @classmethod def instance(cls, *args, .. 2014. 6. 11.