본문 바로가기
배워야 산다/Python 혹은 머신러닝

머신러닝 개발을 위한 기술 분류

by 인라인타지마 2020. 4. 5.

머신러닝 이북-수포자를 위한 머신러닝.pdf.zip
9.34MB

아래 내용들은 실무가 보이는 머신러닝 & 딥러닝 도서를 참조하여 정리하였고,

몇몇의 인터넷 기사 및 댓글, 개발자커뮤니티, 블로그에서 인상깊은 내용들을 가져왔다

위 첨부는 https://bcho.tistory.com/1177 를 참조해서 가져왔다 문제시 삭제 하겠슴다.

 

1. 플랫폼

  • 스파크(spark)
  • 하둡

 

2. 도구 - 주피터 노트북 사용, 인터넷이 안되면 제한적인듯 하다.

  • 현재 대표적 오픈소스로 사용된다 코드와 문서를 동시에 실행하고 작성 가능
  • 파이썬 R, 줄리아 를 지원하며 웹 기반이다.

 

3. 프레임워크

  소개 장점 단점
카페(Caffe)

버클리 인공지능 연구소

코드가 C/C++

최근 페이스북에서 카페 2 공개

이미지처리 특화

설정파일로 학습 정의

코드없이도 실행 가능

파이썬을 연동을 통한 개발

이미지외 부적합

문서화미흡

Deeplearning4j(DL4J)

스카이마인드 회사 개발

하둡/스파크 통합가능

자바기반의 호환성

아파치 2.0라이선스

전문적인 유지보수 지원가능

 

안면인식, 음성인식, 스팸차단 등 명백한 문제 해결에 효과적

자바기반의 이식성 / 안정성

스파크기반 분산처리 지원

문서화가 좋음

디버깅을 위한 시각화 툴 제공

스크립트언어에 비해 학습 및 테스트가 번거로움

예제/커뮤니티 부족

케라스(Keras)

구글 / 소프트웨어 엔지니어

코드몇줄로 딥러닝 모델을 만들수 있음

파이썬으로 작성

내부턱으로 텐서플로, 테아노, CNTK등 엔진이 구동됨 

직관적인 API인터페이스

문서화가 좋음

코드가 간결/가독성 좋음

테아노, 텐서플로에 문제발생시 디버그가 어려움
텐서플로(TensorFlow)

구글 / 브레인팀

딥러닝 뿐만 아니라 강화학습알고리즘도 지원

CPU/GPU 선택가능

시각화도구 - 텐서보드

구글의 번역, 음성인식, 사진 검색 및 분류에 이미 도입 추후 동영상검색에 사용하여 자율주행으로 확장 예정

추상화된 그래프모델

데잍너 및 모델의 병렬화

디버깅을 위한 툴 제공(Tensor Board)

GPU지원

방대한 커뮤니티

토치에 비해 느림

비교적 좋지 않은 성능

부자연스러운 코딩

테아노(Theano) 최초의 딥러닝 프레임워크

추상화된 그래프 모델 지원

데이터 탐색/수치계산 유용

다중 GPU미지원

에러수정어려움

토치(Torch)

뉴욕대학교

루아라는 언어로 개발

파이썬 디버깅 도구를 사용할 수 있다.

알고리즘의 모듈화

다양한 전처리 & 유틸 지원

OpenCL 지원

모바일 지원

협소한 커뮤니티

연구용으로 적합

생소한 기반언어(루아)

부족한 문서

4. 개발언어

 파이썬 

  스크립트 언어 - 초보자들도 배울수 있음

  텐서플로 및 파이토치 등이 파이썬을 지원하여 대표적 개발 언어로 채택되고 있다

  주요 라이브러리 

     사이킷런 : 대부분의 머신러닝 모델을 제공함

     넘파이 : 과학 계산용 파이썬 라이브러리

     판다스 : 데이터 처리와 분석을 위한 파이썬 라이브러리

     맷플로립 : 파이썬에서 자료를 차트나 플롯으로 시각화하는 라이브러리

 

R

  자료의 시각화에 주로 사용되는 프로그래밍 언어

  주요 라이브러리 - 셀레늄, Ggplot2, C50, E1071

 

자바

  객체지향, 명확하고 일관된 구현 및 JVM환경을 사용한 플랫폼 독립성 유지

  주요 라이브러리

    아파치 머하웃(Apache Mahout) : 클러스터링 분류 등 대규모 데이터 처리 알고리즘 제공

    아파치 스파크(Apache Spark) : 실시간 데이터 스트림 처리, 분류, 회귀 알고리즘 제공

    DL4J(Deeplearning4J) : 오픈소스 딥러닝 라이브러리, 아파치 스파크와 하둡 포함

 

C/C++

  처리속도가 빠르나 실행환경에 의존성이 크다는 단점이 있음

  전통적으로 개발자가 많아 다양한 인프라를 가지고는 있다.

 

5. 포맷

  • 판다스(Pandas) : 테이블 형태의 데이터를 다루기 위한 자료형 제공
  • 넘파이(Numpy) : 대량의 수치 데이터 저장, 수치해석, 선형대수등 계산을 수행하는 파이썬 언어 지원 자료의 크기가 고정된 다차원 배열을 저장하고 벡터 연산을 지원하는 가장 많이 활용되는 수학 연산 패키지

6. 클라우드 서비스

  사실상 참조는 할 수 있겠으나 아래의 서비스를 이용하기는 어려울.....

기업 서비스명 설명
아마존 렉스, 폴리, 레코그니션 챗봇, 음성합성, 이미지 분석
구글

자연어 번역(Natural Language)

비전(Vision)

자연어 처리, 기계번역 및 이미지처리
마이크로소프트 애저 봇 서비스, 코그니티브 서비스  자연어 대화를 하는 챗봇 빌더, 시각/음석/언어/지식/검색등 인공지능 API, 머신러닝 엔진 개발을 위한 서비스 등 제공
IBM 왓슨 대화, 언어, 음석인식등 API 서비스
네이버 파파고, 클로바 기계번역, 얼굴인식
솔트룩스 아담데이터 엑소브레인 데이터 처리 분석, 자연어 처리, 지식처리 및 질의 응답

 

 

머신러닝 파이프라인 아키텍쳐와 프로세스

이번 과정을 통해서 머신러닝의 학습 및 예측 시스템 개발이 어느 정도 정형화된 프로세스화가 가능하고 시스템 역시 비슷한 패턴의 아키텍쳐를 사용할 수 있지 않을까 하는 생각이 들었고, 그 내용을 아래와 같이 정리한다.

파이프라인 개발 프로세스

지금까지 경험한 머신러닝 개발 프로세스는 다음과 같다.

 

  1. 데이타 분석먼저 머신러닝에 사용할 전체 데이타셋을 분석한다. 그래프도 그려보고 각 변수간의 연관 관계나 분포도를 분석하여, 학습에 사용할 변수를 정의하고 어떤 모델을 사용할지 판단한다.

  2. 모델 정의 분석된 데이타를 기반으로 모델을 정의하고, 일부 데이타를 샘플링하여 모델을 돌려보고 유효한 모델인지를 체크한다. 모델이 유효하지 않다면 변수와 모델을 바꿔 가면서 최적의 모델을 찾는다.

  3. 데이타 추출 및 전처리유효한 모델이 개발이 되면, 일부 데이타가 아니라 전체 데이타를 가지고 학습을 한다. 전체 데이타를 추출해서 모델에 넣어서 학습을 하려면 데이타의 크기가 크면 매번 매뉴얼로 하기가 어렵기 때문에 데이타 추출 및 전처리 부분을 자동화 한다.   

  4. 전체 데이타를 이용한 반복 학습 및 튜닝모델 자체가 유효하다고 하더라도 전체 데이타를 가지고 학습 및 검증을 한것이 아니기 때문에 의외의 데이타가 나오거나 전처리에 의해서 필터링되지 않은 데이타가 있을 수 있기 때문에 지속적으로 데이타 추출 및 전처리 모듈을 수정해야 하고, 마찬가지로 모델 역시 정확도를 높이기 위해서 지속적으로 튜닝을 한다. 이 과정에서 전체 데이타를 다루기 때문에 모델 역시 성능을 위해서 분산형 구조로 개선되어야 한다.

  5. 모델 배포학습 모델이 완성되었으면 학습된 모델을 가지고 예측을 할 수 있는 시스템을 개발하고 이를 배포한다.

  6. 파이프라인 연결 및 자동화머신러닝의 모델은 위의 과정을 통해서 만들었지만, 데이타가 앞으로도 지속적으로 들어올 것이고 지속적인 개선이 필요하기 때문에 이 전과정을 자동화 한다. 이때 중요한것은 데이타 전처리, 학습, 튜닝, 배포등의 각 과정을 물 흐르듯이 연결하고 자동화를 해야 하는데 이렇게 데이타를 흐르는 길을 데이타 플로우라고 한다. (흔히 Luigi, Rundeck, Airflow와 같은 데이타플로우 오케스트레이션 툴을 이용한다)

https://www.facebook.com/watch/?v=766079863573416

 

보안 확인 필요

메뉴를 열려면 alt + / 키 조합을 누르세요

www.facebook.com

출처 : https://bcho.tistory.com/1177

 

 

** 현실적인 댓글...

https://news.nate.com/view/20200404n12969?mid=n1006

 

"내 자식은 꼭 개발자로···" 코로나19에도 개발자 몸값은 천정부지

직방이 올 초 이사한 강남 GT타워 사옥./사진제공=대림산업[서울경제] 거의 모든 산업이 오프라인에서 온라인으로 전환하면서 관련 정보기술(IT) 개발자 몸값이 꾸준히 뛰고 있다. 신종 코로나바이러스 감염증(코로나19)는 아무런 제약이 안되는 모습이다.

news.nate.com

1. 대기업(SDS,CNS,SKC&C) 은 SI 업체는 실제 개발은 하지 않고 전부 하도급입니다.
2. 카카오, 네이버 등 대형 포탈은 국내 상위1% 업체입니다.
3. 그외 몇몇 상위업체 빼고 대 부분의개발자들은 SI, SM 이 대부분 입니다.
4. AI 로 실제수익을 낼 수 있는 회사는 대기업 및 포털 뿐 입니다.
그리고 이런 회사들은 국내에서 개발자들 채용하지 않습니다.
5. 연봉도 그리 높지 않고 격무에 시달리는 직종이 개발자 직종

 

 ** 구글 검색 결과로 참고 자료

딥러닝 프레임워크 비교
대규모 분산병렬처리 호로보드에 대한 설명

 

 

http://delab.cju.ac.kr/seminar/LG_ai.pdf

 

 

머신러닝에 관한 커뮤니티 여담들 (출처 : http://okjsp.pe.kr:8080/)

우리는 자동차를 툴로 쓰죠.

그렇다고 누구나 자동차를 설계할 수 있는건 아닙니다.

머신러닝 분야에서 수학 모르면 본격 진입하기도 전에 한계를 볼겁니다.

계산기 두둘길 줄 안다고 회계사 하는거 아니자나요?

 

 

머신러닝은 (모르고 두들겨도) 가능합니다. 애초에 과학자가 그 인과관계에 대해서 해석하고 추론할 필요가 없도록 만들어진게 머신러닝입니다. 최신 과학자들도 딥러닝 관련된 처리 방식을 이해못하고 있습니다. 그냥... 때려 넣었더니? 어? 되네? 됐다! 이런 식입니다

 

머신러닝 책이나 강의에선 항상 학습 데이터를 제공해줍니다. 수많은 예제들도 항상 학습 데이터를 다운로드 받는 방법을 함께 알려주죠. 

즉, 쉽게 학습 데이터를 구할 수 있습니다.

그런데요, 현업에선 보통 학습 데이터를 아무도 내게 주지 않습니다. ㅋㅋ

회사에는 아무런 데이터도 없는데 머신러닝 엔지니어에게 머신러닝 모델의 개발요청이 들어오는 것입니다. 

예를 들어, 신용카드 숫자 인식기 만들어 주세요. 얼굴인식기 만들어 주세요. 글자검출기 만들어 주세요. 좋은 상품 추천해 주세요. 등등의 요청이 들어오는 거죠.

학습 데이터가 없는데 도대체 어떻게 만들어라고?

우는 소릴 할 순 없죠. 월급을 받으려면..

그래서 저런 요청이 들어오면 머신러닝 엔지니어의 처음 과업은 학습 데이터 구축입니다. 

 

혼자서 수만개를 수동으로 레이블링 하던가...

다른 모 사이트에서 웹크롤링을 하던가...

비슷한 학습 데이터가 있는지 찾아 보던가....

자신의 회사가 가진 빅데이터에서 추출해 보던가 ...

(정 안되면 돈을 투자하여 알바를 고용해 수십만, 수백만개의 레이블(label)을 달게 하던가)

 

등으로 최대한 돈이 들지 않지만 좋은 품질의 레이블을 돈이 적게 들도록 창의적이고 혁신적인 방법을

생각해 내야 하는 것입니다.

 

아직 머신러닝 모델링의 '모'짜는 꺼내지도 못했습니다만,

학습 데이터 구축이 정말 첫걸음이고,
정말 흔히 머신러닝 엔지니어가 직면하는 문제입니다. 

반응형

'배워야 산다 > Python 혹은 머신러닝' 카테고리의 다른 글

개발환경 구축  (0) 2020.03.30