빅데이터 기술이란?

 

  • 빅데이터의 정의
    • 서버 한 대로 처리할 수 없는 규모의 데이터 - 존 브라우저
    • 기존의 소프트웨어로는 처리할 수 없는 규모의 데이터 
      • 기존 소프트웨어 오라클이나 MySQL과 같은 관계형 데이터베이스
        • 분산 환경을 염두에 두지 않음
        • Scale-up 접근 방식
    • 4V
      • Volume : 데이터의 크기가 대용량인가?
      • Velocity : 데이터의 처리 속도가 중요한가?
      • Variety : 구조화 / 비구조화 데이터 모두 다루는가?
      • Veracity : 데이터의 품질이 좋은가?

Spark 소개

 

  • 하둡의 등장과 소개
    • 대용량 처리 기술이란? 
      • 분산 환경 기반 (1대 혹은 그 이상의 서버로 구성) - 분산 컴퓨팅과 분산 파일 시스템 필요
      • Fault Tolerance - 소수의 서버가 고장나도 동작해야함
      • 확장 용이 - Scale Out
    • 하둡 등장
      • Doug Cutting이 구글랩 발표 논문들 기반으로 만든 오픈소스 프로젝트
        • Google File System (2003)
        • MapReduce : Simplified Data Processing on Large Cluster (2004)
      • 처음 시작은 Nutch라는 오픈소스 검색엔진 하부 프로젝트
        • 2006년 아파치 톱레벨 별개 프로젝트로 분리돼 나옴
      • 크게 두 개의 서브 시스템으로 구현됨
        • 분산 파일 시스템 - HDFS (Hadoop Distributed File System)
        • 분산 컴퓨팅 시스템 - MapReduce
          • 새로운 프로그래밍 방식으로 대용량 데이터 처리 효율을 극대화하는데 맞춤
          • 문제점
            • 작업에 따라 프로그래밍이 너무 복잡해짐
            • Hive처럼 MapReduce로 구현된 SQL 언어들이 다시 각광받게 됨
              • SQL on Hadoop
            • 기본적으로 배치 작업에 최적화 (not realtime)
    • 하둡 발전
      • 하둡 1.0은 HDFS위 MapReduce라는 분산 컴퓨팅 시스템이 도는 구조. 다른 분산 컴퓨팅 시스템은 지원하지 못함
      • 하둡 2.0에서 아키텍처가 크게 변경.
        • 하둡은 기반 분산처리 시스템이 되고 그 위 애플리케이션 레이어가 올라가는 구조
        • Spark는 하둡 2.0위 어플리케이션 레이어로 실행
        • 구조
          • MapReduce / Spark / Tez / ...
          • Yarn(하둡 2.0에서 분산 컴퓨팅 시스템 이름)
          •             HDFS2
    • HDFS - 분산 파일 시스템
      • 데이터 블록 단위 저장 (128MB)
      • 블록 복제 방식 (Replication)
    • 분산 컴퓨팅 시스템
      • 하둡 1.0 : 하나의 잡 트래커와 다수의 태스크 트래커로 구성. 잡 트래커가 일을 나눠 다수 태스크 트래커에 분배
      • 하둡 2.0 : 클라이언트, 리소스 매니저, 노드 매니저, 컨테이너로 역할 세분화. Spark 지원
  • Spark 소개
    • 하둡 뒤를 잇는 2세대 빅데이터 기술
      • 하둡 2.0을 분산환경으로 사용 가능.
      • Scala로 작성됨
    • Map Reduce의 단점 대폭 개선
      • Pandas와 굉장히 흡사하나 다수 서버 분산환경 버전이라는 것만 다름
    • 현재 Spark 버전 3. 이번 강좌에서 사용할 버전.
      • 머신러닝 관련 많은 개선이 있었음. GPU 지원 포함.
    • Spark vs MapReduce
      • Spark는 메모리 기반 MapReduce는 디스크 기반
      • Spark는 하둡 이외 다른 분산 컴퓨팅 환경 지원 MapReduce는 하둡 위에서만 동작
      • Spark는 Pandas와 유사 MapReduce는 키-밸류 기반 프로그래밍
      • Spark는 다양한 방식 컴퓨팅 지원(배치 프로그래밍, 스트리밍 프로그래밍, SQL, 머신 러닝, 그래프 분석)
    • Spark 3.0 구성
      • Spark Core : Pandas와 유사
      • Spark SQL : 데이터 처리를 SQL로
      • Spark Streaming : real time으로 streaming data를 처리해줌.
      • MLib (Spark.ML) : 머신러닝 라이브러리도 돌아감!
      • SparkGraph : 그래프 형태 프로세싱 기능
    • Spark 프로그래밍 개념
      • RDD (Resilient Distributed Dataset)
        • 로우레벨 프로그램이 API로 세밀 제어 가능. 퍼포먼스 향상
        • 그러나 코딩 복잡도 증가
      • Dataframe & Dataset(판다스 데이터프레임과 유사)
        • 하이레벨 프로그램이 API로 점점 많이 사용하는 추세
        • SparkSQL을 사용하면 이를 쓰게 됨
      • 보통 Scala, Java, Python 중 하나 사용

판다스와 비교

 

  • 판다스
    • 파이썬으로 데이터 분석을 하는데 가장 기본이 되는 모듈 중 하나
    • 소규모 구조화된 데이터(테이블 형태 데이터)를 다루는데 최적
      • 데이터 크기가 제약이 됨 (한 대의 서버로 다뤄야 하기 때문)
      • 병렬 처리 지원 X
      • 작은 데이터에선 pandas 큰 데이터에선 Spark
    • 데이터 구조
      • excel의 column이 pandas의 series
      • series들이 모여 DataFrame

Spark의 데이터 구조

 

  • Spark 세션
    • Spark 프로그램의 시작.
    • Spark이 제공해주는 다양한 기능 사용.
    • from pyspark.sql import SparkSession
      
      spark = SparkSession \ 
          .builder \
          .appName("Python Spark create RDD example") \
          .config("spark.some.config.option", "some-value") \
          .getOrCreate()
      sc = spark.sparkContext
      # spark와 sc를 이용해 RDD와 데이터프레임을 조작하게 된다.
  • 데이터 구조
    • 크게 3가지 자료구조
      • RDD(Resilient Distributed Dataset)
        • 로우레벨 데이터. 클러스터내 서버에 분산된 데이터 지칭
        • 레코드별 존재, 구조화된 데이터나 비구조화된 데이터 모두 지원
        • 변경 불가능한 분산 저장된 데이터.
          • 다수의 파티션으로 구성되고 Spark 클러스터내 서버들에 나눠 저장됨
          • 로우레벨 함수형 변환 지원 (map, filter, flatMap 등)
        • RDD가 아닌 일반 파이썬 데이터는 parallelize 함수로 RDD 변환
          • py_list = [
                (1, 2, 3, 'a b c'),
                (4, 5, 6, 'd e f'),
                (7, 8, 9, 'g h i')
            ]
            rdd = sc.parallelize(py_list)
      • DataFrame
        • RDD 위 만들어지는 하이레벨 데이터. RDD와는 달리 필드 정보를 갖고 있다.
        • PySpark에서는 Dataframe 사용
        • 변경 불가능한 분산 저장 데이터
        • 관계형 데이터베이스 테이블처럼 컬럼으로 나눠 저장
          • pandas와 거의 유사
          • 다양한 데이터소스 지원 : 파일, Hive, 외부 데이터베이스, RDD 등
        • 스칼라, 자바, R, 파이썬과 같은 언어 지원
        • 데이터 프레임 생성 방법
          • RDD를 변환해 생성 : RDD의 toDF함수 사용
          • SQL 쿼리 기반 생성 
            • df = spark.read.format("jdbc") \
                  .option("url", "jdbc:postgresql://localhost:5432/databasename") \
                  .option("dbtable", "tablename") \
                  .option("user", "username") \
                  .option("password", "password") \
                  .option("driver", "org.postgresql.Driver") \
                  .load()
              df.printSchema()
            • tablename 자리에 SELECT 사용 가능
        • 외부 데이터를 로딩해 생성
          • createDataFrame
    • Dataset
      • Dataset은 Dataframe과 달리 타입 정보가 존재하며 컴파일 언어에서 사용 가능

Spark 개발 환경

 

  • 개인컴퓨터에 설치하고 사용하는 방법
    • 노트북 등을 설치하려면 복잡
    • spark-submit을 이용해 실행 가능
  • 각종 무료 노트북 사용 방법
    • 구글 colab 이용
    • 데이터브릭(Databrick) 커뮤니티 노트북 사용
    • 제플린 무료 노트북 사용 : https://app.zepl.com/register
      • 주피터같은 웹기반 노트북. 파이썬, 스칼라, SQL 등 다양한 코드 작성, 실행, 결과확인 (시각화 포함), 수정을 손쉽게 반복, 다른 사람과 공유할 수 잇음
      • 주피터와 차이점
        • Spark 기본 지원. 파이썬과 스칼라와 SQL 지원.
        • 인터프리터는 플러그인 구조로 만들어져 있어 다른 모듈과 연동이 쉬움
        • 그 이외 대동소이 (시각화 지원, 노트북 공유 용이)
  • AWS EMR 클러스터 사용
    • 프로덕션 환경에 가까음

'AI > KDT 인공지능' 카테고리의 다른 글

[07/22] Spark 3  (0) 2021.07.22
[07/21] Spark 2  (0) 2021.07.21
[07/19] 12주차 강의 개요  (0) 2021.07.19
[06/28] 심층학습 기초2  (0) 2021.06.28
[06/24] 심층학습 기초  (0) 2021.06.24

데이터 팀의 역할과 구성원은 누구인가?

 

  • 데이터 팀의 미션
    • 신뢰할 수 있는, 신속히 사용 가능한 데이터를 바탕으로 부가가치 생성
      • 신뢰
        • 데이터의 품질이 보장되지 않으면 데이터를 이용하는 일들이 전부 보장되지 않는다.
      • 신속 
        • 필요할 때 이용 가능 = 데이터가 빠르게 이용 가능해야 한다.
      • 부가가치
        • 데이터는 본업이 아니다. 그러나 데이터를 기반으로 수요를 올리거나, 회전율을 높여 부가가치를 생성해낼 수 있다.
  • 데이터 팀 목표
    • 고품질의 데이터를 제공해 정책 결정에 사용 => 결정과학(Decision Science)라고 부르기도 함.
      • 데이터 참고 결정(data informed decisions) vs 데이터 기반 결정(data driven decisions)
      • = 데이터를 참고하겠다 vs 데이터가 말하는대로 가겠다
      • 기본적으로 전자가 좋다!
    • 고품질 데이터가 필요할 때 제공해 사용자 서비스 경험 개선
      • 데이터 기반 알고리즘을 통해 개선.
      • 하지만 사람의 개입/도움이 필요 (human-in-the-loop)
  • 데이터 활용 순서
    1. 사이트의 방문 트래픽과 외부 데이터가 생성됨 (이메일, 마케팅 등등)
    2. 데이터 팀(데이터 엔지니어들)이 모아진 데이터를 데이터 웨어하우스에 모아 놓음
      • 데이터 웨어하우스
        • 회사에 필요한 모든 데이터를 모아놓은 중앙 데이터베이스
          • 데이터의 크기에 맞게 DB 선택
          • 크기가 커지면 AWS RedShift, 구글 클라우드 BigQuery, 스노우 플레이크나 오픈소스 기반 하둡/스팍 사용 추천 : 모두 SQL 지원.
          • 프로덕션용 DB와 별개의 DB임. 
      • 데이터 파이프라인 = ETL(Extract, Transform, Load) 시스템을 통해 데이터 형태를 원하는 form으로 변환 후 웨어하우스에 적재
        • Airflow 오픈소스 프로젝트. 파이썬 3 기반. (에어비앤비, 우버, 리프트, 쿠팡 등에서 사용)
        • AWS와 구글클라우드에서도 지원
        • 흔한 데이터 소스의 경우 SaaS(Softare as a Service) 사용 가능 (ex)FiveTran, Stitch Data, ...)
    3. 비즈니스 인사이트를 도출해 냄 (데이터 분석팀 / 데이터 애널리스트 팀) - 시각화 작업
      • 데이터 분석이란?
        • 회사와 팀별 중요 지표(metrics) 정의. 대시보드 형태로 시각화(visualization)
        • 이외 데이터와 관련한 다양한 분석/리포팅 업무 수행
      • 시각화 대시보드란?
        • 중요한 지표를 시간의 흐름과 함께 보여줌.
          • 3A(Accessible, Actionable, Auditable)가 중요
            • Accessible : 쉽게 접근 가능해야 한다.  
            • Actionable : 지표를 보고 무슨 일을 해야할 지 분명히 드러나야 좋은 지표다.
            • Auditable : 지표가 맞게 계산되고 있는지 감사할 방법이 있어야 한다.
        • 널리 사용되는 대시보드
          • 구글 클라우드 룩커(Looker)
          • 세일즈포스의 태블로(Tableau)
          • 마이크로소프트 파워 BI(Power BI)
          • 오픈소스 아파치 수퍼셋(Superset)
    4. (개인화 등을 통한) 제품 서비스 개선.
  • 데이터 팀에서의 역할
    • 데이터 엔지니어
      • 데이터 인프라(데이터 웨어하우스와 ETL) 구축
      • 데이터 분석가, 과학자들과 협업을 통해 필요한 툴이나 데이터 제공
    • 데이터 분석가
      • 데이터 웨어하우스의 데이터 기반 지표를 만들고 시각화 (대시보드)
      • 내부 직원들의 데이터 관련 질문 응답
      • 필요한 스킬셋 - SQL, 통계적 지식, 비즈니스 도메인에 관한 깊은 지식, 보통 코딩을 하진 않음
    • 데이터 과학자
      • 과거 데이터 기반 미래를 예측하는 머신러닝 모델을 만들어 고객들 서비스 경험 개선(개인화/자동화/최적화)
      • 테스트는 가능하면 A/B 테스트를 수행하는 것이 더 좋음
        • A/B 테스트란?
          • 온라인 서비스에서 새 기능 임팩트를 객관적으로 측정하는 방법
          • 새로운 기능을 런치함으로 생기는 위험부담을 줄이는 방법.
            • 먼저 5% 사용자에게만 런치하고 나머지 95%의 사용자와 매출액과 같은 중요 지표를 가지고 비교
            • 5% 대상으로 별 문제가 없으면 점진적으로 10%, 20% 정도로 런치 비율을 늘린 후 최종적으로 100%로 런치
          • 기존 기능에 노출된 그룹(control) 새로운 기능에 노출된 그룹(test) 2개 그룹으로 나눠 시간을 두고 관련 지표 비교
          • 가설과 영향받는 지표를 미리 정하고 시작하는 것이 일반적
      • 필요한 스킬셋 - 머신러닝/인공지능에 대한 깊은 지식과 경험, 코딩 능력(파이썬, SQL), 통계 지식, 수학 지식, 끈기와 열정. 박사 학위가 도움이 됨.
      • 머신러닝 모델링 사이클
        • 가설 - (데이터 수집 - 분석 - 모델 개발 - 모델 런치 - 테스트 시작) - 비즈니스 개선(매출증대, 경비 절약)
        • 괄호로 묶은 부분을 짧은 사이클로 구성하여 점진적으로 개선함. (폭포수보단 애자일)
    • 작은 회사에선 한 사람이 몇 개의 역할을 동시 수행하기도 함

데이터 팀 조직 구조

 

  • 중앙집중 구조 : 모든 데이터 팀원들이 하나의 팀으로 존재
    • 일 우선 순위는 중앙 데이터팀이 최종 결정
    • 데이터 팀원들간 지식, 경험 공유가 쉬워지고 커리어 경로가 잘 보임
    • 현업 부서들 만족도는 상대적으로 떨어짐
  • 분산 구조 : 데이터 팀이 현업 부서별로 존재
    • 일 우선 순위는 각 팀별로 결정
    • 데이터 일을 하는 사람들간 지식/경험 공유가 힘들고 데이터 인프라나 데이터 공유가 힘들어짐
    • 현업부서들 만족도는 처음엔 좋지만 많은 수 데이터 팀원들이 회사를 그만두게 됨
  • 중앙집중과 분산 하이브리드 모델
    • 가장 이상적 조직 구조
    • 데이터 팀원들 일부는 중앙에서 인프라적 일 수행, 일부는 현업팀 파견식으로 일하되 주기적으로 일 변경
    • 데이터 팀 안에서 커리어 경로가 만들어짐

모델 개발시 고려할 점

 

  • 데이터 과학자는 복잡하더라도 cross validation의 결과가 좋은 모델을 만드려한다. 그래서 모델을 다 만들고 나서는 신경을 꺼버린다. 그러나 엔지니어들은 모델에 대한 테스트를 제대로 하지 않게 된다. 모델을 제대로 알지도 못하고, 해봤자 자신한테 더 도움되는 것은 없기 때문에.
  • 즉, 모델을 production에 어떻게 이양(serve)할 건지를 고려해야 한다.
  • 모델 개발 시 꼭 기억할 포인트
    • 모델 개발부터 최종 런치까지 책임질 사람이 필요하다.
    • 모델 개발 초기부터 개발/런치 과정을 구체화하고 소통
      • 모델 개발 시 모델을 어떻게 검증할 것인가?
      • 모델을 어떤 형태로 엔지니어들에게 넘길 것인가?
        • 피쳐 계산을 어떻게 하고, 모델 자체는 어떤 포맷인가?
      • 모델을 프로덕션에서 A/B 테스트할 것인가?
        • 한다면 최종 성공판단 지표가 무엇인가?
    • 개발된 모델이 바로 프로덕션에 런치간으한 프로세스/프레임워크가 필요
      • ex1) 트위터 : 데이터 과학자들에게 특정 파이썬 라이브러리로 모델 개발 정책화
        • 툴을 하나로 통일하면 제반 개발과 런치 관련 프레임워크 개발이 쉬워진다.
      • ex2) AWS의 SageMaker : 머신러닝 모델개발, 검증, 런치 프레임워크
        • 검증된 모델을 버튼 클릭 하나로 API 형태 런치 가능
        • Google Cloud와 Azure도 비슷한 프레임워크 지원
    • 피드백 루프가 필요
      • 운영에서 생기는 데이터를 갖고 개선점 찾기
        • 검색이라면 CTR(Click Through Rate, 결과가 10개있으면 몇 개를 클릭한 비율. 3개 클릭했음 30% 정도밖에 안 되는 것일 듯.) 모니터링하고 모든 데이터 기록
      • 주기적으로 모델 재빌딩
 

Machine learning is going real-time

[Twitter thread] After talking to machine learning and infrastructure engineers at major Internet companies across the US, Europe, and China, I noticed two groups of companies. One group has made significant investments (hundreds of millions of dollars) in

huyenchip.com


데이터 일 관련 교훈

 

  • 데이터를 통해 매출이 생겨야 함.
    • 어느 조직이건 회사에서 존재 이유는 매출 창조 혹은 경비 절감이다.
  • 데이터 조직의 수장의 역할이 중요하다.
    • 다시 한 번 데이터 인프라 구성이 첫 번째라는 점을 명심하되 단기적으로 좋은 결과를 낼 방법을 찾아야 한다.
  • 데이터 인프라가 무조건 첫 번째다.
    • 데이터 인프라 없이는 데이터 분석이나 모델링은 불가능하다. (성장한 회사 기준)
    • 고려점
      • 클라우드 vs 직접 구성
      • 배치 vs 실시간
  • 데이터 품질이 아주 중요.
  • 항상 성공 척도(지표)를 처음부터 생각.
    • 나름 가설을 세우는 것이 인사이트를 키우는데 큰 도움이 됨
    • 지표 계산에 있어 객관성이 중요
      • 계산된 지표를 아무도 못 믿으면 큰 문제
      • 지표를 어떻게 계산할 것인지, 이걸 다른 사람들에게 어떻게 설명할지 고려
  • 가능한 간단한 솔루션으로 시작. 반복 기반의 점진적 개발 방식(애자일)을 채택하자.

'AI > KDT 인공지능' 카테고리의 다른 글

[07/21] Spark 2  (0) 2021.07.21
[07/20] Spark  (0) 2021.07.20
[06/28] 심층학습 기초2  (0) 2021.06.28
[06/24] 심층학습 기초  (0) 2021.06.24
[06/23] 다층 퍼셉트론  (0) 2021.06.23

컨볼루션 신경망 사례 연구

 

영상 분류(image classification)

 

  • ImageNet
    • 약 2만 2천여 부류에 대해 데이터를 수집해 이를 공개하며 image classfication을 발전시키는데 크게 기여한 데이터셋
  • ILSVRC 대회(CVPR 학술대회 개최)
    • 1000가지 부류에 대해 분류, 검출, 위치 지정 문제 : 1순위와 5순위 오류 성능 대결
    • 우승
      • AlexNet(2012) -> Clarifi 팀 (2013) -> GooLeNet&VGGNet(2014) -> ResNet(2015) -> SENet(2017)
    • 우승한 모델은 코드와 학습된 가중치를 공개함으로써 널리 사용되는 표준 신경망이 됨

(이 모든 것의 이전에는 LeNet이 있었다... LeNet을 기초로 알고 있자!)


AlexNet

 

  • 구조
    • 컨볼루션층 5개와 완전 연결(Fully Connected(FC)) 층 3개
      • 8개 층에 290400 - 186624 - 64896 - 43264 - 4096 - 4096 - 1000개 노드 배치
    • 컨볼루션층은 200만개, FC층은 6500만개 가량 매개변수
      • FC층에 30배 많은 매개변수 -> 향후 FC층의 매개변수를 줄이는 방향으로 발전
    • 당시 GPU 메모리 크기 제한으로 GPU#1(색과 관련없는 특징 추출), GPU#2(색과 관련된 특징 추출)로 분할해 학습 수행
      • 3번째 컨볼루션 층은 두 대 GPU 결과를 함께 사용 (inter-GPU connections)
      • 컨볼루션 층 큰 보폭으로 다운 샘플링
  • 학습 성공 요인
    • 외적 요인
      • 대규모 사진 데이터
      • GPU 사용 병렬 처리
    • 내적 요인
      • 활성함수 ReLU 사용
      • 지역 반응 정규화(local response normalization)(같은 위치에 있는 것끼리 normalize하는.. 너무 튀지 않게 주변값하고 맞춰준다.) 기법 적용 (지금은 사용 x)
        • 인간 신경망 측면 억제 모방(중요한 거에만 집중할 수 있게... ex)우리가 집중하고 있지 않은 영역은 뿌옇게 보이는 것), ReLU 활성화 규제
        • 1번째, 3번째 최대 풀링 전 적용
      • 과잉적합을 방지하는 여러 규제 기법 적용
        • 데이터 확대 (잘라내기, 반전으로 2048배 확대)
        • 드롭아웃 (완전연결층에서 사용)
          • 완전연결은 파라미터값이 과도하게 많아져 overfitting 문제가 발생할 가능성이 커진다. 이를 해결하고자 드롭아웃을 사용. 드롭아웃을 적용하게 되면 연결되는 데이터를 살려 특징들이 세분화되어 가중치에 녹아들게 된다. 즉, 특징들을 몰리게끔 만들어주어 안의 가중치들이 의미있는 것만 활성화되어 의미있게 학습이 되게 된다.
      • 테스트 단계에서 앙상블 적용 (여러 모델을 묶어서 통합해 수렴적 결과를 보는 방식)
        • 입력된 영상을 잘라내기와 반전을 통해 증가. 증가된 영상들의 예측 평균으로 최종 인식
        • 2~3%만큼 오류율 감소 효과

VGGNet

 

  • 핵심 아이디어
    • 3*3의 작은 커널 사용
      • 작은 커널의 이점
        • GoogLeNet의 인셉션 모듈처럼 이후 깊은 신경망 구조에 영향
        • 큰 크기의 커널은 여러 개 작은 크기 커널로 분해될 수 있다.
          • 매개변수의 수는 줄며 신경망은 깊어짐
          • ex) 5*5 커널을 3*3 커널로 분해해 구현 가능. (stride 2)
          • ex) n*n커널은 1*n 커널과 n*1 커널로 분해 가능. n이 클수록 매개변수 수는 줄어드는 효과가 큼.
      • 1*1 커널
        • VGG에서 적용 실험을 했지만 최종 선택은 하지 않음 (GoogLeNet에서 사용)
        • 차원 통합
          • feature map 통합
        • 차원 축소 효과
          • feature를 적게 쓰면 차원을 축소시킬 수 있음
    • 신경망을 더욱 깊게 만듦(신경망의 깊이가 어떤 영향을 주는지 확인)
    • 컨볼루션층 8~16개를 두어 AlexNet의 5개에 비해 2~3배 깊어짐. 
    • ->깊은 신경망의 효율성을 확인해 준 모델

GoogLeNet

 

https://norman3.github.io/papers/docs/google_inception.html

 

  • 핵심 아이디어
    • 인셉션 모듈(Inception module) 9개 결합
      • 수용장의 다양한 특징을 추출화기 위해 NIN(Network In Network)의 구조를 확장해 복수의 병렬적 컨볼루션 층을 가짐.
        • NIN 구조
          • 기존 컨볼루션 연산을 MLPConv 연산으로 대체
            • 커널 대신 비선형 함수를 활성함수로 포함하는 MLP를 사용해 특징 추출이 유리
          • 신경망의 미소 신경망(micro neural entwork)가 주어진 수용장 특징을 추상화 시도
          • 전역 평균 풀링(global average pooling) 사용
            • MLPConv가 부류 수만큼 특징 맵을 생성하면, 특징 맵 각각을 평균해 출력 노드에 입력
              • ->매개변수 감소
            • 각각 해당하는 feature map이 해당하는 class에 직접적으로 연결되는 특징들이 몰리게끔 학습이 될 것이다.
      • 마이크로 네트워크로 MLPConv대신 네 종류 컨볼루션 연산 사용 -> 다양한 특징 추출
        • 1*1 컨볼루션 사용해 차원 축소(dimension reduction) (그림 (b)의 Inception module with dimension reductions 참고)
          • 매개변수 수 (특정 맵 수) 줄임 + 깊은 신경망
        • 3*3, 5*5 같은 다양한 크기 컨볼루션을 통해 다양한 특징 추출
      • 매개변수가 있는 층 22개, 없는 층(풀링) 5개로 총 27개 층
      • 완전 연결층은 1개에 불과
        • 백만 개 매개변수를 가지며, VGGNet의 1%에 불과
    • 보조 분류기(auxiliary classifier)
      • 원 분류기 오류 역전파 결과와 보조 분류기 오류 역전파 결과를 결합해 경사 소멸 문제 완화
      • 학습할 때 도우미 역할, 추론할 때 제거

ResNet (신경망의 깊이를 깊게 만드는데 도움을 준 신경망)

 

CS231n

 

  • 잔류(잔차) 학습(Residual learning)이라는 개념을 이용해 성능 저하를 피하며 층 수 대폭 늘림 (얕은 신경망을 조금씩 학습해나가는 구조가 residual block)
    • 지름길 연결된 x(자기 자신)를 더한 F(x) + x에 τ를 적용. F(x)는 잔류.
      • 이전의 모델들은  H(x)(그림 참고)를 얻기 위한 학습이었다면, ResNet은 F(x) = H(x)-x 즉, 나머지를 학습하기 위한 모델이다. F(x)가 0이 되는 방향으로 학습.
      • y = τ(F(x) + x)
      • 지름길을 두는 이유
        • 깊은 신경망도 최적화가 가능
          • 단순한 학습 관점의 변화를 통한 신경망 구조 변화
            • 단순 구조 변경 매개변수 수 영향 없음
            • 덧셈 연산만 하여 전체 연산량 증가도 미비
        • 깊어진 신경망으로 인해 정확도 개선 가능
        • 경사 소멸 문제 해결
          • 자기 자신에 대해서 변화량이 얼마만큼 있는지만 학습하게 해주면 gradient가 사라지는 문제가 없을 것. 
  • VGGNet과 공통점
    • 3*3커널 사용
  • 차이점
    • 잔류 학습 사용
    • 전역 평균 풀링 사용 (FC층 제거)
    • 배치 정규화 적용 (드롭아웃 적용 불필요)

생성 모델

 

모델 학습 단계가 할 일 예측 단계가 할 일 지도 여부
분별 모델 P(y|x) 추정 f:x → y 지도
생성 모델 P(x)
P(x|y),
P(x, y) 추정
f: 씨앗 → x 또는
f: 씨앗, y → x,
f: 씨앗 → x, y
비지도

 

  • 실제 상황에서 생성 모델
    • 현실에 내재한 데이터 발생 분포 P_data(x) -> 알아낼 수 없다.
    • P_data(x)를 모방하는 모델 확률 P_model(x; Θ)
      • P_model(x; Θ)를 명시적으로 추정하는 것도 어렵다
      • 현대 기계 학습은 주로 딥러닝 모델을 사용해 확률 분포를 암시적으로 표현
        • GAN(generative adversarial network), VAE(variational autoencoder), RBM
  • 생성 모델 분류

https://christineai.blog/taxonomy/


GAN

 

  • 생성기(generator) G와 분별기(discriminator) D의 대립구도
    • G는 가짜 샘플 생성 (위조지폐범)
    • D는 가짜/진짜 구별 (경찰) (서로 적대적인 신경망)
  • GAN 목표는 위조지폐범 승리 (G가 만들어내는 샘플을 D가 구별못하는 수준까지 학습)

 

'AI > KDT 인공지능' 카테고리의 다른 글

[07/20] Spark  (0) 2021.07.20
[07/19] 12주차 강의 개요  (0) 2021.07.19
[06/24] 심층학습 기초  (0) 2021.06.24
[06/23] 다층 퍼셉트론  (0) 2021.06.23
[06/22] 라이브 세션  (0) 2021.06.22

심층학습

 

배경

 

  • 1980년대 깊은 신경망 아이디어 등장
  • 한계
    • 경사 소멸 문제 (gradient vanishing)
    • 작은 훈련집합(어려운 데이터 수집)
    • 과다한 연산과 시간 소요 (낮은 연산의 범용 컴퓨터, 값비싼 슈퍼컴퓨터) (심층학습을 받쳐주지 못하는 하드웨어)
  • 성공배경
    • 혁신적 알고리즘 등장
      • 합성곱 신경망 (Convolutional neural networks, CNN) 구조
      • 경사 소멸 문제 해결을 위한 ReLU 활성함수
      • 과잉적합을 방지하는데 효과적인 다양한 규제 기법
      • 층별 예비학습(pretraining) 기법 개발
    • 값싼 GPU 등장 (하드웨어 보안)
    • 학습 데이터 양과 질 향상

고전적 다층 퍼셉트론과의 비교

 

  • 전통적 다층 퍼셉트론
    • 은닉층은 특징 추출기
    • 얕은 구조 (제한적 특징 추출)이므로 가공하지 않은 획득한 원래 패턴을 그대로 입력하면 낮은 성능
    • 따라서 사람이 수작업 특징을 선택(feature selection)하거나 추출(feature extraction)하여 신경망에 입력
    •                               ↓학습집합
      패턴 -> 특징 추출 -> 분류 (얕은 신경망) -> 부류
  • 심층학습
    • 학습에 의해 자동적으로 데이터로부터 특징(data-driven features) 추출 <- 표현 학습representation learning
    • 특징 벡터를 인공 신경망의 입력으로 줌 <- 종단간 학습(end-to-end learning)
    •                  ↓학습집합
      패턴 -> 특징 + 분류 (얕은 신경망) -> 부류
    • 깊은 신경망의 구조와 동작은 Multi Layer Perceptron과 같다.

깊은 신경망 표현 학습(representation learning / 특징 학습 feature learning)

 

낮은 단계 은닉층은 선이나 모서리와 같은 간단한(저급) 특징 추출

높은 단계 은닉층은 추상적 형태(abstractive representation)의 복잡한(고급) 특징 추출

 


역사적 고찰

 

  •               퍼셉트론 -> 다층 퍼셉트론 -> 깊은 다층 퍼셉트론
    활성함수 : 계단 함수    시그모이드 함수   ReLU와 변형들
    목적함수 : MSE                MSE             교차 엔트로피 또는 로그우도
  • 합성곱 신경망(CNN)의 부상 -> 완전 연결을 부분 연결로 바꾸자! (깊은 다층 퍼셉트론의 파생형이라 할 수 있음)

 


왜 심층학습은 강력한가?

 

  • 전체 깊은 신경망을 동시에 최적화 (종단간 학습 end-to-end)
  • 깊이의 중요성
    • ex) 점선이 20개 노드를 가진 은닉층 하나 짜리 신경망이라고 하면
      실선은 각각 10개 노드를 가진 은닉층 두 개 신경망이라고 할 수 있다. 즉, 더 정교한 분할이 가능해진다.
  • 계층적 특징(hierarchical features)
    • 깊은 신경망에서는 층의 역할이 잘 구분됨
    • 그러나 얕은 신경망은 하나 또는 두 개의 은닉층이 여러 형태의 특징을 모두 담당
      (깊은 신경망은 은닉층 수가 많은 것. 얕고 넓은 신경망은 1~2개의 은닉층 내부에 굉장히 많은 노드가 있는 것)

컨볼루션 (합성곱) 신경망 Convolutional neural network, CNN

 

  • 구조
    • 컨볼루션층 (CONV)
      • 선형함수인 컨볼루션과 비선형 함수인 활성함수 조합
      • 학습에 의해 결정된 복수의 커널들 (혹은 필터들)에 대응되는 특징들 추출
        • 각 층의 입출력 특징 형상이 유지된다.(특징맵)
        • 영상의 공간 정보를 유지하며 공간적으로 인접한 정보의 특징을 효과적으로 인식
        • 각 커널(필터)은 파라미터를 공유함으로써 완전 연결 신경망 대비 학습 파라미터가 매우 적음
    • 풀링층 (POOL)
      • 컨볼루션의 얻어진 특징을 통계적으로 압축 (최근에는 쓰지 않음)
      • 특징을 요약하고 강화함
    • (CONV - RELU) - (CONV - RELU) - POOL - .... - FC
  • 활용 분야
    • 분류 (classification)
    • 검색 (retrieval)
      • 비슷한 사진 출력을 보여줌.
      • ex) 구글 검색엔진
    • 검출 (detection)
    • 분할 (segmentation)
      • 검출의 상위호환. 클래스를 픽셀 단위로 구분해준다.
  • DMLP(Deep Multi Layer Perceptron)와 CNN 비교
    • DMLP
      • 완전 연결(fully connection) 구조. 높은 복잡도
      • 학습이 매우 느리고 과잉적합 우려
    • CNN
      • 컨볼루션 연산을 이용한 부분연결 (희소 연결) 구조로 복잡도 크게 낮춤
        • 이미지이기 때문에 부분연결을 통해서도 성능이 좋을 수 있다.
        • 이미지에는 지역성이 있기 때문에. 가까운 픽셀끼리가 먼 픽셀끼리보다 특징적으로 유사할 것.
        • 지역성을 중첩해서 전체의 shape을 만들어 나간다.
      • 컨볼루션 연산은 좋은 특징 추출
      • 특징
        • 격자(grid) 구조 (영상, 음성 등)를 갖는 데이터에 적합
        • 수용장(receptive field)은 인간시각과 유사
        • 가변 크기 입력 처리 가능
          • 컨볼루션층에서 보폭을 조정하거나, 풀링층에서 커널이나 보폭을 조정해 특징 맵 크기 조절
      • 컨볼루션 신경망 예제 https://transcranial.github.io/keras-js/#/
 

Keras.js - Run Keras models in the browser

 

transcranial.github.io


컨볼루션층

 

컨볼루션은 해당하는 요소끼리 곱하고 결과를 모두 더하는 선형 연산이다.

연산은 다음과 같다.

위는 1차원 입력, 아래는 2차원 입력 식

u는 커널(kernel/필터 filter), z는 입력, s는 출력 (특징 맵 feature map)

 

컨볼루션 연산 그림 예)

 

https://leonardoaraujosantos.gitbook.io/artificial-inteligence/machine_learning/deep_learning/convolution

 

덧대기(Padding)

 

가장자리에 영상의 크기가 줄어드는 효과 방지 (각 층 입출력의 특징형상 유지)

 

편향(bias) 추가

 

커널에 편향 추가

 

가중치 공유(weight sharing / parameter sharing)(묶인 가중치)

 

모든 노드가 동일 커널 사용

즉, 가중치를 공유하므로 매개변수는 3개에 불과하다.

∴ 모델 복잡도가 크게 낮아진다.

 

다중 특징 맵 추출

 

커널의 값에 따라 커널이 추출하는 특징은 달라진다.

∵ 하나의 커널만 사용하면 너무 빈약한 특징이 추출

그래서 실제로는 수십~수백 개의 커널을 사용한다.

 

특징 학습

 

커널을 사람이 설계하지 않고, 학습으로 찾음

DMLP와 마찬가지로 오류 역전파로 커널 학습

 

병렬분산 구조

 

각 노드는 독립적으로 계산 가능하므로 병렬 구조

+ 노드는 깊은 층을 거치며 전체에 영향을 미치므로 분산 구조

 

큰 보폭(stride)에 의한 다운샘플링(down-sampling)

 

일반적으로 보폭이 k면, k개마다 하나씩 샘플링해 커널 적용

-> 2차원 영상의 경우 특징 맵이 1/k^2으로 작아짐

텐서 적용

 

3차원 이상 구조에도 적용 가능

이 때, 입력 차원이 3이면 (ex)RGB) 커널도 그에 맞춰서 3차원으로 결정이 된다.


풀링층

 

  • 풀링 연산 종류 (풀링 연산은 특징은 유지하되, 사이즈를 줄인다.) 
    • 최대 풀링 max pooling
      • 특징 값 중 가장 큰 값 추출
      • https://paperswithcode.com/method/max-pooling
    • 평균 풀링
      • 특징 값 평균을 내 추출
    • 가중치 평균 풀링
  • 풀링 연산 특성
    • 풀링은 상세 내용 요약 혹은 평균 등 통계적 대표성 추출
    • 매개변수가 없음
    • 특징 맵 수 그대로 유지 (깊이는 유지(차원). 가로 세로는 변화)
    • 연산 효율화 (연산 횟수, 연결 가중치 개수 줄임)
    • 작은 변화에 둔감 -> 물체 인식이나 영상 검색에 효과적

CNN의 전체 구조

 

  • 빌딩 블록(building block)
    • CNN은 빌딩 블록을 이어 붙여 깊은 구조로 확장
    • 전형적 빌딩블록 : CONV -> ReLU(활성함수) -> POOL
    • 다중 커널을 사용해 다중 특징 맵 추출
  • 컨볼루션 층 출력 크기와 매개변수 수
    • 입력 : W1*H1*D1 (width, height, depth)
    • K개 F*F 커널, 보폭 S, 덧대기 P
      • 출력 크기 : W2*H2*D2
                       W2 = (W1-F+2P)/S+1
                       H2 = (H1-F+2P)/S+1
                       D2 = K
      • 매개변수 수 :
                       커널마다 (F*F*D1)개 가중치와 1개 바이어스를 가짐.
                       따라서, 전체 매개변수 수는 (F*F*D1)K + K
      • 일반적으로 F=2, S=2 혹은 F=3, S=1 사용
    • 위 식을 실제 예제로 보면
      입력 크기 : 32*32*3
      10개의 5*5 커널 보폭 1, 덧대기 2
      • 출력 크기 : (32-5+2*2)/1+1=32 -> 32*32*10
        층의 매개변수 개수 : 5*5*3+1 = 76 (+1은 편향 추가) -> 76*10 = 760

 

CNN 시각화 예제 https://poloclub.github.io/cnn-explainer/

'AI > KDT 인공지능' 카테고리의 다른 글

[07/19] 12주차 강의 개요  (0) 2021.07.19
[06/28] 심층학습 기초2  (0) 2021.06.28
[06/23] 다층 퍼셉트론  (0) 2021.06.23
[06/22] 라이브 세션  (0) 2021.06.22
[06/21] 신경망의 기초  (0) 2021.06.21

+ Recent posts