Sequence classification의 어려운점

카테고리 없음 2016. 10. 10. 09:44

치매 뇌파 분석과 같이 시계열 데이터를 분석함에 있어서의 어려운 점을 정리해 보자.

 

- 입력 데이터가 길고 길이가 일정하지 않을 수 있다.

- 입력 심볼의 다양성. 입력 신호를 어떤 단위화된 심볼로 본다면 그 다양성이 매우 크다. 심볼의 크기도 시간 단위, 혹은 윈도우 크기,를 무엇으로 정하냐에 따라 너무 많은 심볼이 가능. 뇌파와 같이 실수 단위의 데이터라면. gg

- 긴 시간동안의 context 학습 필요

- 심볼간의 dependency도 학습 필요. 어떠한 심볼들의 순차적 출현이 중요한 패턴일지 학습해야 하므로 꼭 학습 필요. (contextual information, contextual dependency, .. 등등의 용어, spatial relationship)

- 계속

posted by Dr.Deeeep

딥러닝모델6 (A31) 설계

카테고리 없음 2016. 9. 30. 04:18

Bigdata-trader.com의 31번째 알고리즘(모델번호 A31이며 6번째 딥러닝 모델)을 개발하기 위한 연구 노트

목적
딥러닝 기술을 이용하여 급등주의 사전 조짐을 학습 가능한가 테스트 하기 위함. 여기서 급등주란 일반적인 우상향주가 아닌 장기간 소외되던 종목이 5일간 연속 으로 하루평균 10%이상의 가격 상승을 경험 한 종목으로 정의 하기로 함.

가설
주가의 급변(급 상승)은 새로운 호재 나 수익성 개선에 따른 예측 불가의 시장의 자연스러운 가격 변동이 아닌 특정 매수 세력의 의도된 행위의 결과이고, 매수 세력이 사전에 수년에서 수 개월간 해당 종목에서 준비를 한 후 행한 행위의 결과임을 가정. 이러한 준비 행위는 급등 직전 몇 달간의 거래 데이터를 기계 학습함으로써 포착 할 수 있는 특이한 패턴을 갖음을 가정 함. 

방법
과거 데이터에서 급등주를 필터링 및 수집함. 세력주 지수를 이용하여 20일 눌림목 지수 특정값 이상 종목중 급등주 정의에 해당하는 것만 선택. 급등전 강기간 소외 되었음을 확인 하는 루트 추가 필요. 1차 수집정보는 (종목번호와 급등 시작 날짜). 1차 수집 정보만을 ann_builder를 이용하여 2차 수집 정보를 수집함. 2차 수집 정보(시간, 주가, 국내외 인덱스, 외인 거래량, 외인 포션등)는 시계열 데이터로 생성하며 수집기간을 파라미터 입력으로 받아 디비에서 추출하여 ann_builder 입력 폼으로 변형. 어느정도의 수집 기간이 보장되어야 하므로 신규 종목은 제외되어야함 (수집 시작일에 데이터 시작일보다 이전인 종목 제외). 
네거티브 클래쓰 데이터로 급등주 외의 일반적 우상향주, 우하향주 등도 같이 모아야함.

서비스를 위해서는 트레이닝이 끝난 네트워크를 종목별로 파일로 저장하여 가지고 있어야 하는데 cafe24에서는 그들의 정책상 keras를 수행할 수 없을 듯. 자바만 가능하므로 A26~A30과 같이 A31과 관련된 모든 코드는 dl4j로 작성해야 할 듯.

추가적으로 개발해야 할 툴. 패키지에 util_rapidSoaringANNBuilder.java 추가. 박스권 상향 이탈과 동시에 급등하는 패턴을 찾는 유틸리티. 급등주의 조건이 까다로우므로 퀄리파이하는 루틴필요. 다음과 같은 순서로..

1) 새로운 테이블 추가: 다른 쪽에서도 공유할 수 있도록 패턴 이름으로 분리하여 저장 

mysql>create table patternfound
(
  patternname varchar(30) not null,
  itemcode varchar(8) not null,
  a varchar(10) not null,         // start date of soaring
  b varchar(10),    
  c varchar(10),    
  d varchar(10),
  primary key (patternname, itemcode, a) 
);

2) 매일 자동 업데이트시 세력지수 테이블내 모든 종목 추출 => 후보들

3) 후보들 중 원하는 패턴인가 qualify

4) qualify 리턴 값은 soaring starting date 임. 테이블의 a 에 저장

5) 장기간 수집 후 patternfound 테이블을 이용 디비 재검색하여 2차 데이터 수집

6) 2차 데이터이용 학습 데이터 생성

7) 학습 데이터 생성시 중복 체크 필수. 같은 "종목+startdate" 혹은 같은 종목코드인테 startdate가 근소하게 무의미하게 차이가 나는 레코드가 존재할 수 있으므로 확인 필요

 

 

 

posted by Dr.Deeeep

딥러닝에서 Epoch의 중요성

상념 2016. 9. 29. 08:40

 

 

 

 

epoch는 전체 데이터에 대한 한번의 학습(forward 와 backward 포함)을 의미. 네트웍의 웨이트는 학습 시작시 초기값이 무엇이냐에 따라 학습 결과가 다르므로 매 epoch시마다 weight값이 수정되도록 한다면 매번 학습을 수행할때마다 전체 네트웍의 포텐셜이 달라짐. 그러나 항상 포지티브하게 달라짐을 보장할 수는 없으므로 매번 sum of loss 곡선을 확인 하면서 적당한 epoch의 수를 결정하는 것이 좋겠음.

batch size 한번의 학습시 사용되는 데이터의 수로 전체 데이터의 수보다 작거나 같음. batch size가 학습 효율에 어떤 영향을 끼칠지는 연구해봐야 하지만 큰 영향이 없을 것 같음(citation needed). 단지 사용하는 메모리의 문제일듯(?) [수정] 학습되는 모델의 성능으로의 영향보다는 학습 속도와 학습 효율에 영향을 줌. 한번의 batch 내에서의 학습된 내용은 batch 종료시까지 네트워크에 반영이 되지 않기 때문임. 따라서 학습 초기에는 적은 batch size로 빈번히 업데이트 해주고 학습 후기로 갈 수록 batch size를 크게 잡아주는 것이 효율적이지 않을까 생각됨. [여기까지 수정]

iteration은 정해진 batch size를 이용하여 학습(forward + backward)를 반복하는 횟수로 epoch와는 다른 의미. 한번의 epoch를 위해 수번의 iteration이 필요.

 

epoch는 학습 결과가 포지티브한 방향성이 관찰된다면 높은수를 정해줄 수록 좋은 결과를 얻을 수 있기 때문에 딥러닝에 좋은 하드웨어가 필요한 이유임. 그러나 높은 epoch는 데이터 자체를 머신에 학습시키는 것이므로 오버피팅의 문제가 있음. 적절한 epoch와 overfitting을 피하기 위한 기술 적용 필요.

posted by Dr.Deeeep