Docker


Docker

  • 리눅스의 응용 프로그램들을 프로세스 격리 기술을 사용하여 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다
  • 도커는 아래와 같은 주요 구성 요소들이 존재한다
    • 이미지
    • 컨테이너
    • 데몬

      Docker image

  • 서비스 운영에서 필요한 프로그램, 소스코드, 각종 모듈, 컴파일된 실행파일을 묶는 형태를 말한다
  • 간단히 말해서 프로세스를 실행하기 위해 필요한 모든 파일과 설정값을 저장하고 있어서 추가적으로 의존성 파일을 설치할 필요없는 상태이다
  • Image는 Layer로 이루어져 있다
  • image를 build할때 효율적으로 동작하기 위해 구현된 층을 Layer라고 한다
    • image는 여러개의 읽기전용 Layer로 구성되어 있다
    • 다른 image를 받아와서 그위에 Layer를 쌓아 새로운 Image를 만드는것도 가능하다
    • 아래의 명령어 한줄한줄이 Layer라고 생각해도 무방하다
      1
      2
      3
      4
      5
      6
      7
      FROM pytorch/pytorch:1.7.0-cuda11.0-cudnn8-runtime
      RUN apt-get update -y
      ...
      WORKDIR /app
      COPY ./src /app/src
      COPY ./test /app/test
      ENTRYPOINT python3 /app/src/run.py
  • 이를 통해 컨테이너를 생성할 수 있다

Docker Container

  • Image를 실행, 응용프로그램 자체를 격리된 공간에서 동작시키는 기술이다
  • Image를 통하여 여러대의 Container를 생성 할 수 있고, 이 Container들은 모두 동일한 개발환경을 가지게 된다
    • Docker의 장점 1
    • 여러대의 분리된 서버를 모두 같은 환경으로 만들 수 있다
  • Image를 실행시키기만 하면 Image에 저장되어있던 모든 파일들과 환경변수등이 셋팅되기 때문에 설치가 매우 간편하다
    • 장점 2

Docker Daemon

  • Docker Container나 Image를 관리하는 Kernel
  • user가 client를 통해서 보낸 명령을 받아서 Docker 객체들을 관리한다
  • 하나의 커널로 여러 Container를 관리하기 때문에 가상환경에 비해 도커가 용량을 덜 차지하고, 더 빠른 속도를 가질 수 있다

reference

Linux 커맨드


Linux Command

기본 커멘드

  • man [command]
    • 쉘 커맨드의 매뉴얼 문서를 출력해준다
  • mkdir [name]
    • name의 이름을 가진 directory를 생성한다
  • ls
    • 현재 접근한 폴더의 폴더, 파일 확인
    • a: 현재 접근한 폴더의 전체 파일 출력(.으로 감춰진 폴더까지 전부)
    • l: 권한, 소유자, 만든날짜, 용량까지 출력
    • h: 용량을 보기쉽게 GB, MB등으로 표현
  • pwd
    • 현재 폴더의 경로를 절대경로로 표시
  • echo
    • ‘text’: 터미널에 텍스트를 출력
    • “command”: 터미널에 커멘드의 출력한 결과를 출력해준다
  • sudo [command]: 슈퍼유저로 프로그램을 실행
  • clear
    • 커멘트 창을 깨끗하게 해준다
  • history
    • 최근에 입력한 쉘 커맨드 History 출력
    • !number 를 통해 커맨드 재활용 가능하다
  • export
    • 환경변수를 지정할 수 있다.
    • 커널을 종료하면 날아가니까 .bashrc 등에 적으면 영구적으로 사용가능하다
  • alias
    • 기존 커맨드의 별칭을 지정할 수 있다
    • ex) alias ll2=’ls -l’

파일 관리 관련 커맨드

  • cp [filename] [newfilename]
    • Copy
    • -r : directory 내부의 모든 파일도 같이 복사
    • -f : 강제로 복사
  • mv [filename] [newfilename]
    • 파일 옮기기(혹은 이름바꾸기)
  • cat [files] (> or >> [filename])
    • 특정 파일 내용 출력
    • 여러파일을 인자로 주면 합쳐서 출력
    • > : 파일을 저장하고 overwrite
    • >> : 파일에 추가하는 경우
  • head, tail [number]
    • 파일 앞/뒤의 n행 출력
  • sort
    • 말 그대로 sort
  • uniq
    • 중복되는 라인을 제거하는 명령어
    • c : 제거된 라인을 count한다

서버 관련 커맨드

  • ps
    • 현재 실행되고 있는 프로세스 출력
  • curl
    • 웹서버 작성 후 Request 테스트 하는 명령어
  • df
    • 디스트 용량확인
    • -h로 가독성을 높임
  • scp
  • chmod
    • 파일의 권한을 변경하는 경우 사용한다
    • r 읽기권한 4
    • w 쓰기권한 2
    • x 실행권한 1
    • 수를 합쳐서 표기하면 여러개의 권한을 나타낼 수 있다

reference

AI 프로젝트 설계


문제를 해결하기 위한 흐름

  • 현상파악
  • 목적 및 문제 정의
  • 프로젝트 설계
  • Action
  • 추가적인 원인 분석

1. 현상 파악 및 문제 정의

  • 문제의 정의
    • 특정 현상을 파악하고, 그 현상의 있는 문제를 정의하는 과정이 필요하다
    • 풀고자 하는 문제를 명확하게 하는것이 중요하다
  • 어느정도 현상파악이 끝나면 내렸던 문제의 정의를 좀더 구체적으로 만들어본다
    • 문제 해결을 위한 대상을 정하기
    • 목표에 대한 구체적인 정의 등
    • 왜 그러한 일이 발생하는지 가설세우기
    • 이 문제대해 어떠한 데이터가 존재하는가?

2. 프로젝트 설계

  • 처음부터 최대한 자세하게 설계하자

  • 머신러닝 문제 타당성 확인

    항상 ML이 만능은 아니다

    • ML을 사용하면 좋은경우
    • 학습가능한 패턴이 존재하는 문제
      • 사람이 반복적으로 실행하는 task인 경우 -> ML로 대체될 가능성이 높다
    • 그리고 그 패턴이 복잡할 경우
      • 간단한 문제면 Huristic한 알고리즘이 이것보다 몇배는 더 빠르다
      • 간단하면 계산 코스트가 너무 커질 가능성이 높다
    • 목적함수를 만들 수 없으면 ML의 의미가 없다
    • 데이터 수집이 가능할 경우 : 데이터가 없으면 답이 없다
      • 없으면 데이터 수집부터 진행해야한다…. Labeling
    • 인종, 성향 등등의 윤리적인 제한에 자유로울 경우
  • 프로젝트의 목표 및 지표 설정

    • 목표 : 일반적인 목적, 큰 목적, 메인 Task
    • 지표 : 목적을 달성하기 위한 세부 단계의 목표
  • 제약조건

    • 이 문제를 해결하기 위해 무한한 자금과 시간이 있는것이 아니다.
    • 시간적인 문제
    • 금전적인 문제
    • 데이터가 민감한 정보들을 포함하고 있을 가능성도 존재한다
    • 데이터 윤리적인 문제
  • Baseline, Prototype 제작

  • Metric Evaluation

3. Action

  • 모델 개발 후 배포, 모니터링 과정
  • 앞서 설계한 지표의 변화 파악하는 과정을 진행한다

4. 추가 원인분석

  • 새롭게 발견한 상황들의 원인 분석 및 해결방안 설계

비즈니스 모델 BM

  • 회사가 어떤 서비스 가치를 제공하고있는가?
    • 비즈니스 모델 : 회사가 서비스를 제공하여 가치를 창출하는 방식
  • 서비스의 핵심을 파악하자
  • 어떠한 데이터를 가지고있는가
  • 데이터로 무엇을 할수 있을까

reference

부스트 캠프 ai tech 4주차 Data 시각화 (13)


Missingno

  • 결측치를 시각화 해주는 라이브러리
  • 빠르게 결측치의 분포를 확인할 때 사용가능하다
  • missingno library를 사용한다

plotly

  • interactive한 시각화를 할때 사용하는 시각화 라이브러리
  • 추가적으로 다룰 예정이다
  • Treemap같은 계층을 interactive 하게 보여줄때 사용한다

Waffle Chart

  • pywaffle
  • 와플형태로 discrete하게 값을 나타내는 차트
    • github commit형태
  • icon을 이용해서 표현을 할 수 있다
  • info graphic 에 유용하게 사용가능하다

Venn

  • 집합으로 표현하는 시각화
  • pyvenn을 사용
  • EDA보다는 출판용으로 사용하는것이 좋다
    • 가독성이 좋지 않다

reference

부스트 캠프 ai tech 4주 5일차 DL Basic (9)


GAN

  • 적대적 생성모델
  • 노이즈로부터 데이터를 생성하는 Generator와 데이터가 진짜 데이터인지 생성된 데이터인지를 판단하는 Discriminator 2개의 구조로 이루어져 있다
  • Generator와 Discriminator는 서로의 Loss값을 최대로 하는 방향으로 학습을 하려 한다
    • Generator는 Discriminator의 판단한 결과로 실제 데이터와 유사하게 학습하는 방향으로 학습한다
    • Discriminator는 이진분류기로 실제데이터와 생성데이터를 분류한다
  • GAN을 아래와 같이 표현이 가능하다.
    $$
    min_G, max_D, V(D,G) = \mathbf{E}{x\sim p{data}(x)}[\operatorname{log}D(x)] + \mathbf{E}{z \sim p{z}(z)}[\operatorname{log}(1 - D(G(z)))]
    $$

GAN & VAE

  • VAE
    • 학습이 안정적이다
    • 결과물이 흐릿하게 나올 확률이 높다
    • 학습 데이터에 있는 데이터와 비슷하게 나온다
      • 새로운것을 만들어내지는 못함
  • GAN
    • 학습이 불안전하다
    • 출력물이 뚜렷한 편이다
      • 새로운 분포를 만들 수 있다
  • 최근에는 VAE또한 많이 발전해서 output이 GAN 이상의 것들을 보여준다

    reference

  • Naver Connect Boostcamp - ai tech

부스트 캠프 ai tech 4주 4일차 DL Basic (8)


Generative Model

  • 생성모델은 아래와 같은 특징을 가진다
  • Generatation
    • 기존의 데이터 확률분포 $p(x)$ 에 속하는 $x_new$를 만들어 낸다
  • Density estimation
    • data $x$가 기존의 데이터와 비슷하면 확률분포 $p(x)$상에 존재할 가능성이 높다.
    • anomaly detection 이상치 탐지
    • 설명 가능한 모델 등이 있다

Variaty Autoencoder

  • Latent Space로 부터 데이터를 생성해내는 모델을 말한다
  • Encoder와 Decoder 2부분으로 이루어져 있다
    • Encoder에서는 기존의 Dataset으로 부터 Latent Space를 생성한다
      • $x \rightarrow p(x)$
    • Decoder는 Latent Space로부터 역으로 Data를 생성한다
      • $p(x) \rightarrow x$
  • 그래서 Encoder에서는 Dataset으로 Latent Space의 확률분포를 근사하고
    • $q_\phi$(z|x)
  • Decoder에서는 Latent Space에서 기존 Dataset의 확률분포로 이동을 시켜준다
    • $p_\theta(x)$
    • 하지만 위의 확률분포는 우리가 알 방법이 없다
  • 그래서 이것을 근사하기 위해 VAE에서 사용된 2가지 기법에 대해서 간략하게 설명한다

Variaty Inference

  • $q_\phi(z|x)$와 $p_\theta(z|x)$의 차이($D_{KL}$)를 줄이는것이 궁극적인 목표이다

    • 하지만 $p_\theta(z|x)$은 우리가 알 수가 없다
  • 그래서 Maximum Likehood를 변형시켜서 학습에 이용한다

  • $\mathcal{L}(\theta, \phi ; x)$ : Evidence Lower Bound (ELBO)
    $$
    \begin{aligned}
    log(p_\theta (x)) &= \int_z q_\phi(z|x)log(p_\theta(x))\\
    &= \mathcal{L}(\theta, \phi ; x) + D_{KL}(q_\phi(z|x)||p_\theta(z|x))
    \end{aligned}
    $$

  • $D_{KL}$는 항상 1보다 크기때문에 위의 식은 다음과 같이 나타낼 수 있다.

$$
log(p_\theta (x)) \geq \mathcal{L}(\theta, \phi ; x)
$$

  • 여기서 ELBO를 크게 하는 쪽으로 학습을 하게되면 $D_{KL}$은 줄어들게 된다.

Reparametrization Trick

  • 학습과정 중간에 Sampling이 들어가서 미분이 되지 않는것을 해결하기 위한 Trick
  • sampling 한 값 $z$가 $\mu_q + \sigma_q \cdot \epsilon$ 과 같다고 생각하고 기존에 없던 $z$에 대해서 미분이 가능하게 바꾸었다.

reference

부스트 캠프 ai tech 4주 3일차 DL Basic (6)


Sequential Model

Naive sequeance model

  • 과거 모든시점의 데이터를 고려해야한다
  • 시퀸스가 진행될 수록 고려해야할 데이터 양이 늘어남

Autoregressive model

  • 특정 과거 시점 이후의 데이터만 고려한다

    Markov model

  • Markov Chain role에 의하여 바로 전 state가 이전시점의 모든 데이터를 가지고 있다고 가정한다
  • 위의 이유로 바로 전 시점의 데이터만 고려함
  • 강화학습에서 많이 사용하는데 현실에 직접 적용하기에는 버려지는 정보량이 너무 많다

Latent autoregressive model

  • 과거의 모든 정보들을 요약한 hidden state를 사용한다
    • hidden state가 어떻게 정의되느냐에 따라서 모델간 많은 차이가 존재한다
  • RNN도 Latent autoregressive model라고 볼 수 있다

Recurrent Neural Network (RNN)

  • 자기참조로 학습하는 네트워크
  • short-term dependencies
    • 먼 과거의 정보(Long-term)는 고려하기 힘들다
    • 자기참조로 인한 연산이 계속되면서 gradient vanishing(sigmoid, tanh)이나 exploring(ReLU 계열)이 발생한다

Long Short Term Memory

  • 먼 과거의 정보를 고려하기위해 고안된 RNN

  • 기존에 존재하는 Hidden state에 내부에서만 연산되는 Cell State를 추가하여 먼 과거의 정보 또한 잘 기억할 수 있다

  • $x$ : data

  • $C$ : Cell state

  • $h$ : hidden state

  • $\sigma$ : sigmoid function

  • $tanh$ : hyperbolic tan function

Cell state

  • 먼 과거의 정보까지 요약해서 가지고 있다가 Hidden state에 넘겨주는 역할
  • 과거의 정보가 희석되는것을 막는 Resnet의 Skip Connection과 비슷한 역할을 한다
  • Cell state는 다음과 같은 과정으로 업데이트 된다
  1. $t-1$시점의 Hidden state가 Forget Gate를 통과
    • Forget Gate : 중요하지 않은 정보들을 없애는 Gate
      $$
      f_{t} = \sigma(W_{f}\cdot[h_{t-1}, x_{t}] + b_f)
      $$
  2. $t-1$시점의 Hidden state가 Input Gate를 통과
    • Input Gate : Cell state에 저장해야하는 정보들을 결정하는 Gate
      $$
      \begin{aligned}
      i_{t} &= \sigma(W_{i}\centerdot [h_{t-1}, x_{t}] + b_{f})\\
      \tilde{C_{t}} &= tanh(W_{C}\cdot [h_{t-1}, x_{t} ]+b_{C})
      \end{aligned}
      $$
  3. $t-1$시점의 Cell state와 Gate를 통해서 나온 값들의 연산으로 Cell state를 업데이트 한다
    $$
    C_{t} = f_{t} * C_{t-1} + i_{t}*\tilde{C_{t}}
    $$

Hidden state

  • 기존의 RNN에 Hidden state와 동일한 역할
  • 아래의 Output Gate에 Cell state와 Hidden state의 연산으로 업데이트 된다
  1. Output Gate
    $$
    o_t = \sigma(W_o [h_{t-1}, x_t] + b_i)\\
    h_t = o_t * tanh(C_t)
    $$

Gated Recurrent Unit (GRU)

  • LSTM과 비슷한 형태
  • 2개의 Gate(reset Gate, update Gate)가 존재하고 Cell state가 없다
  • LSTM보다 더 적은 parameter를 가진다

reference

부스트 캠프 ai tech 4주 3일차 DL Basic (5)


Fully Convolutional Network

  • CNN에서 마지막을 담당하던 Dense Layer를 Dense Layer Feature와 동일한 Channel수를 가진 Convolution Layer로 대체한 Network
  • Dense Layer는 reshape을 통해서 input을 집어넣기 때문에 정해진 input size가 필요 했지만, convolution Layer의 경우 channel 이외에는 가변적이기 때문에 이미지의 크기와 상관없이 연산이 가능해졌다
  • 연산을 할 때 마다 차원이 축소되는 문제가 있다 -> upsampling기법을 사용
    • conv transpose -> checker board
    • unpooling

Object Detection

R-CNN 계열

  • R-CNN
    • Selective Search 로 BBox 2000개정도를 추출 한 뒤 각각 CNN을 돌린다
    • CNN 연산이 2000번 반복되기 때문에 매우 느린 속도이다
  • fast R-CNN
    • SPP Net을 이용하여 기존 2000번 반복된 연산을 1번으로 줄임
  • Faster R-CNN
    • Selective Search를 Region Proposal Network로 바꾼 R-CNN
    • Region Proposal Network : BBox도 네트워크 학습으로 뽑아내자
    • 기존에 존재하는 anchor Box(샘플한 여러 크기의 Bbox)와 이미지를 비교하여 물체가 있을법한 장소를 탐색하고, 대략적인 Bbox위치를 특정한다

Yolo

  • BBox와 Classfication이 동시에 이루어지는 1 stage 모델
  • R-CNN 계열에 비해서 속도가 매우 빠르지만, 정확도는 조금 떨어진다
  • 실시간 물체검출이나 추적에 용이한 모델이다

reference

부스트 캠프 ai tech 4주 1일차 DL Basic (4)


AlexNet

  • CNN으로 구성된 Network
  • 시작부분에 11 x 11의 큰 convolution Layer를 사용했다

VGGNet

  • 여러장의 3 x 3의 convolution Layer와 2 x 2 MaxPooling을 사용하였다
  • 여러장의 3 x 3의 convolution Layer를 사용하면서 다음과 같은 advantage를 얻었다
    • 큰 convolution Layer와 동일한 연산을 더 작은 Parameter로 수행할 수 있다
    • receptive field를 크게 유지할 수 있다
    • 더 깊게 비선형적으로 Layer 추가가 가능해 진다

GoogLeNet

  • 1 x 1, 3 x 3, 5 x 5, maxpooling을 이용하여 inception module을 구성하였다
  • 1 x 1 convolution Layer를 이용해서 Channel 수를 줄여주었다
  • Layer가 깊어지면서 Gradient Vanashing이 일어나는것을 막기위해 Auxiliary classifier를 두어서 추가적으로 Gradient를 더해주었다
    • inference시에는 사용되지 않는다

ResNet

  • Skip Conncetion을 두어 Gradient Vanashing을 해결하여 더 많게 레이어를 쌓은 모델이다
  • VGGnet의 3x3을 차용하여 파라미터 수를 크게 늘리지 않으면서 레이어를 더 쌓았다
  • channel이 변하는 구간에서는 DownSampling을 통하여 channel과 Height, weight를 맞춰주었다

reference

부스트 캠프 ai tech 4주 2일차 DL Basic (3)


Convolution Neural Network (CNN)

  • 시각적 데이터르 분석하는데 사용되는 인공신경망
  • CNN은 크게 Convolution Layer, Pooling Layer, (Fully Cunnect Layer)로 구성된다

Convolution layer

  • 합성곱 연산이 진행되는 레이어
  • parameter의 수는 $kernel_size \times Channel_in \times Channel_out$으로 계산된다
  • 이미지 처리를 할 시에 Fully Connected Layer보다 parameter 수가 월등하게 적다
  • 실제 연산 이미지
  • input과 output의 크기는 아래와 같이 계산된다
  • input : $(N, C_{in}, H_{in}, W_{in})$
  • output : $(N, C_{out}, H_{out}, W_{out})$
  • stride : 연산이 이루어지는 간격
  • padding : 차원을 확장시켜 convolution 연산후에도 크기가 일정하게 유지되도록 한다
  • kernel : convolution 연산을 하는 주체, filter이기도 하다
  • N : batch size
  • C : Channel 수
  • W : 연산될 Matrix의 가로 길이
  • H : 연산될 Matrix의 세로 길이

Pooling Layer

  • 일정 범위안의 값들을 대표하는 하나의 값으로 압축하는 down sampling 기법
  • W와 H을 줄여서 차원을 축소하고, 연산에 필요한 parameter 수를 줄인다.
Max Pooling

1x1 Convolution

  • kernel size가 1,1인 convolution 연산을 하는것
  • input, output의 W, H는 일정하지만 channel수가 감소한다.
  • WHY?
    • channel 수를 줄여서 차원축소를 시키고, 추후에 연산에 필요한 parameter 수를 줄인다

$$
H_{out} = \left[ \frac{H_{in} + 2 \times \operatorname{padding[0]} - \operatorname{kernel_size[0]}}{\operatorname{stride}[0]} +1 \right]
$$

$$
W_{out} = \left[ \frac{W_{in} + 2 \times \operatorname{padding[1]} - \operatorname{kernel_size[1]}}{\operatorname{stride}[1]} +1 \right]
$$

reference