커리어 이야기

 

  • 이것만은 기억하자!
    • 남과 비교하지 말고 앞으로 2-30년을 보자
    • 하나를 하기로 하면 적어도 6개월은 파자.
      • 너무 빨리 포기하지 말자. 잘하는 사람들과 비교 금물. 어제의 나와 오늘의 나를 비교하자.
      • 뭐가 잘 안 되면 오히려 천천히 가자
    • 공부를 위한 공부를 하기보단 일을 시작해보자.
      • 어디건 일을 시작하고 발전하자.
      • 면접 실패를 감정적으로 받아들이지 말자.
    • Love Myself!
  • 커리어를 점진적 발전이라는 관점에서 보기
    • 커리어가 평생 직장이란 것이 존재하던 세상에서는 Waterfall(폭포수)였으나 이제는 계속해서 배우고 변해야 하는 Scrum으로 변화하였다. 
      • 어디서 시작하건 자신에 대해 배우며 계속해서 변화하고 성장하는 것이 중요하다. 
      • Growth Mindset
  • 새로운 시작(ex) 첫 직장에서의 일과 같은.. ) - 처음 90일이 중요하다. (The First ninety days)
    • 자기 검열하지 말고 매니저 스타일을 파악하고 피드백을 요청하기
    • 과거 상처를 갖고 시작하지 않기
    • 남과 비교하지 않기
    • 열심히 일하되 너무 서두르지 않기
  • 새로운 기술의 습득이 아닌 결과를 내는데 초점 맞추기
    • 아주 나쁘지 않은 환경에 있단 전제
    • 자신이 맡은 일을 잘 하기 위해 필요한 기술 습득
      • 예를 들어 자동화하기 혹은 실행시간 단축
    • 자신이 맡은 일의 성공/실패를 어떻게 결정하는지 생각
      • 매니저와의 소통이 중요
      • 성공/실패 지표에 대해 생각
    • 일을 그냥 하지 말고 항상 '왜' 이 일이 필요하고 큰 그림 생각
      • 질문하기

SQL 소개

 

  • 구조화된 데이터를 다루는 SQL. 데이터 규모와 상관없이 쓰인다.
  • 모든 대용량 데이터 웨어하우스는 SQL 기반이다.
    • Redshift, Snowflake, BigQuery, Hive, SparkSQL ...
  • 데이터 분야에서 일하고자 하면 반드시 익혀야 할 기본 기술이다.
  • 관계형 데이터베이스
    • 대표적 관계형 데이터베이스
      • MySQL, Postgres, Oracle, ...
      • Redshift, Snowflake, BigQuery, Hive ...
    • 관계형 데이터베이스는 2단계로 구성된다.
      • 가장 밑단엔 테이블들이 존재
      • 테이블들은 데이터베이스라는 폴더 밑으로 구성
    • 테이블(=스키마) 구조
      • 테이블들은 레코드들로 구성
      • 레코드는 하나 이상의 필드로 구성
      • 필드는 이름과 타입으로 구성됨

관계형 데이터베이스 예제 : 웹 서비스 사용자 / 세션 정보

 

  • 데이터
    • 사용자 ID : 보통 웹서비스에서 등록된 사용자마자 유일한 ID 부여
    • 세션 ID
      • 사용자가 외부 링크(보통 광고)를 타고 오거나 직접 방문해서 올 경우 세션 생성
      • 즉, 하나의 사용자 ID는 여러 개 세션 ID를 가질 수 있음
      • 보통 세션의 경우 세션을 만들어낸 소스를 채널이란 이름으로 기록해둠
        • 마케팅 관련 기여도 분석을 위함
      • 세션 생성 시간도 기록
  • 위의 데이터를 통해 다음과 같은 다양한 데이터 분석과 지표 설정 가능
    • 마케팅 관련
    • 사용자 트래픽 관련
    • etc

 

  • ex) 사용자 ID 100번이 총 3개의 세션을 갖는 예제
    • 100번 ID를 가진 사용자의 웹 서비스 이용 경로
      • 09:30 AM : 구글 광고 타고 방문
      • 09:31 AM : 상품 광고 클릭
      • 09:33 AM : 상품 리뷰 페이지 클릭
      • 09:45 AM : 페이스북 광고 타고 방문
      • 09:47 AM : 다른 상품 광고 클릭
      • 10:30 AM : 네이버 광고 타고 방문
      • 10:35 AM : 상품 구매

 

위의 데이터에 대해 생성될 수 있는 데이터베이스와 테이블은 다음과 같다.

 

  • raw_data 데이터베이스
    • user_session_channel
      • 컬럼 타입
        userid int
        sessionid varchar(32)
        channel varchar(32)
      • channel 값 ex) instagram, facebook, naver, etc...
    •  session_timestamp
      • 컬럼 타입
        sessionid varchar(32)
        ts timestamp
  • marketing 데이터베이스
  • ...
  • SQL(Structured Query Language) 소개
    • 1970년대 초반 IBM이 개발한 구조화된 데이터 질의 언어
      • 주로 관계형 데이터베이스에 있는 데이터(테이블)를 질의하는 언어
    • 두 종류의 언어로 구성된다.
      • DDL(Data Definition Language) : 테이블 구조 정의어
        • CREATE TABLE / DROP TABLE / ALTER TABLE
        • --ex
          
          CREATE TABLE raw_data.user_session_channel(
              userid int,
              sessionid varchar(32),
              channel varchar(32)
          );
      • DML(Data Manipulation Language) : 테이블 조작 정의어
        • SELECT FROM / INSERT INTO / UPDATE SET / DELETE FROM
        • -- ex
          
          SELECT * FROM raw_data.user_session_channel LIMIT 10; -- 10개의 데이터를 읽어와라
          
          SELECT COUNT(1) FROM raw_data.user_session_channel;
          
          SELECT COUNT(1) FROM raw_data.user_session_channel;
          WHERE channel='Facebook'; -- channel 이름이 Facebook인 경우만 고려
          
          SELECT COUNT(1) FROM raw_data.user_session_channel;
          WHERE channel like '%o%'; -- channel 이름에 o나 O가 있는 경우만 고려
          
          SELECT channel, COUNT(1) --channel별 레코드 수 카운트하기
          FROM raw_data.user_session_channel
          GROUP BY channel;
        • 세션에 대한 모든 정보를 읽어오려면 user_session_channel과 session_timestamp를 조인해야 한다.
        • SELECT *
          FROM raw_data.user_session_channel usc
          JOIN raw_data.session_timestamp ts ON usc.sessionID = ts.sessionID;

 


SparkSQL 소개

 

  • SparkSQL과 Spark Core의 차이점
    • 구조화된 데이터 처리를 위한 Spark 모듈
    • 대화형 Spark shell 제공
    • 하둡 상 데이터를 기반으로 작성된 hive 쿼리의 경우 변경없이 최대 5~10배까지 빠른 성능을 가능하게 해준다.
    • 데이터 프레임을 SQL로 처리 가능
      • RDD 데이터, 외부 데이터는 데이터프레임으로 변환 후 처리 가능
      • 데이터프레임은 테이블이 되고 그 다음부터 SQL 함수 사용 가능
  • Spark의 일반적 사용법 이해
    • 외부 데이터베이스 연결
      • 외부 데이터베이스 기반 데이터 프레임 생성
        • SparkSession의 read 함수를 사용해 테이블 혹은 SQL 결과를 데이터프레임으로 읽어옴
      • Redshift 연결 
        • SparkSession을 만들 때 외부 데이터베이스에 맞는 JDBC jar 지정
        • SparkSession의 read 함수 호출
          • 로그인 관련 정보와 읽어오고자 하는 테이블 혹은 SQL 지정
          • 결과가 데이터 프레임으로 리턴됨
        • 데이터 프레임 기반 테이블 뷰 생성 : 테이블이 만들어짐
          • createOrReplaceTempView : sparkSession이 살아있는 동안 존재
          • createGlobalTempView : Spark 드라이버가 살아있는 동안 존재
        • SparkSession의 sql 함수로 SQL 결과를 데이터 프레임으로 받음

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

[07/27] NLP : 텍스트 전처리  (0) 2021.07.28
[07/22] Spark 3  (0) 2021.07.22
[07/20] Spark  (0) 2021.07.20
[07/19] 12주차 강의 개요  (0) 2021.07.19
[06/28] 심층학습 기초2  (0) 2021.06.28

빅데이터 기술이란?

 

  • 빅데이터의 정의
    • 서버 한 대로 처리할 수 없는 규모의 데이터 - 존 브라우저
    • 기존의 소프트웨어로는 처리할 수 없는 규모의 데이터 
      • 기존 소프트웨어 오라클이나 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

+ Recent posts