Ustage Day 1


행렬과 벡터 그리고 기초 파이썬에 대한 설명을 진행한다.

부스트 캠프 1일차 학습 요약

  • 행사 : 타운홀 미팅, Meet with Peer, 어색하DAY
  • 강의 : 뉴비를 위한 기초 컴퓨터, 벡터가 무엇인가요?, 행렬이 무엇인가요?
  • 피어 세션

목차

1. 뉴비를 위한 기초 컴퓨터

1-1. 컴퓨터 OS

OS(Operating System, 운영체제) - 우리의 프로그램이 동작할 수 있는 구동 환경 - 프로그램은 OS에 의존적이며 OS에 맞춰서 개발해야한다.

1-2. 파일 시스템

  • OS에서 파일을 저장하는 드리구조 저장 체계
  • root 디렉토리로 부터 시작하는 트리구조로 되어있다.
    • 파일
      • 컴퓨터 등의 기기에서 의미 있는 정보를 담는 논리적인 단위, 모든 프로그램은 파일로 구성되어 있고, 파일을 사용한다.
      • 컴퓨터에서 정보를 저장하는 논리적 단위
      • 파일명과 확장자로 식별된다.
      • 실행, 쓰기, 읽기 등을 할 수 있다.
    • 디렉토리
      • 폴더 또는 디렉토리로 불린다.
      • 파일과 다른 디렉토리를 포함할 수 있다.
    • 절대 경로와 상대경로
      • 절대 경로 : 루트 디렉토리로부터 파일위치까지의 경로
      • 상대 경로 : 현재 있는 디렉토리부터 타깃 파일까지의 경로

1-3. 터미널

  • 마우스가 아닌 키보드로 명령을 입력 프로그램 실행
    • GUI : 우리가 흔히 아는 것처럼 마우스를 활용하여 클릭을 통해 프로그램을 실행하는 환경
    • CLI : GUI와 달리 Text를 사용하여 컴퓨터에 명령을 입력하는 인터페이스 체계

1-3-1. 터미널 도구

  • Windows - CMD window, Windows Terminal, cmder(권장)
  • Mac, Linux - Terminal

1-3-2. 소소한 Terminal Tip

  • 윈도우는 “윈도우 키 + R” 입력 후 cmd입력하면 Terminal이 시작된다.
  • 맥은 “빠른실행 terminal”을 입력하면 실행된다.
  • 기본 명령어(본인은 cmder유저이므로 shell 명령어만 표기하였으며, 윈도우의 경우 명령어가 다소 차이가 있으니 확인 후 사용해야한다.)
    • cd : 현재 디렉터리 이름을 보여주고나 바꾼다.(change directory)
    • clear : cmd 화면에 표시된 것을 모두 지운다.(clear screen)
    • cp : 하나 이상의 파일을 다른 위치로 복사한다.
    • rm : 하나 이상의 파일을 지운다.(remove)
    • ls : 디렉터리에 있는 파일과 하위 디렉터리 목록을 보여준다.(list)

2. 벡터가 뭐예요?

2-1. 벡터란?

  • 숫자를 원소로 가지는 리스트 혹은 배열
  • 열벡터(세로로 되어있는 벡터), 행벡터(가로로 되어있는 벡터) - 보통 행벡터는 열벡터의 Transpose이다.
  • 공간에서의 한 점을 나타낸다.
  • 일반적인 n차원 벡터의 경우, n개의 축을 가지는 좌표평면 위에서 표현되는 점으로 이해할 수 있다.
  • 원점으로부터 상대적 위치를 표현한다.
  • 벡터에 스칼라곱을 해주면 길이만 변한다.

2-2. 벡터의 특징 및 연산

  • 벡터의 차원 : 벡터에 있는 원소의 개수
  • 벡터끼리 같은 모양을 가지면 덧셈, 뺄셈, 성분곱을 계산할 수 있다. Note 성분곱 : Hadamard Product 혹은 Element-wise Product라고 부르며 동일한 위치에 있는 원소들끼리의 곱을 의미한다.
  • 벡터의 덧셈, 뺄셈 : 다른 벡터로부터 상대적 위치이동을 표현한다.

2-3. 벡터의 Norm

  • 원점에서 벡터까지의 거리를 의미한다.
  • 임의의 차원 d에 대해서 성립한다.
  • $L_1$ Norm : 절대값의 합(각 성분의 변화량의 절대값의 합) L1노름_
  • $L_2$ Norm : 제곱합의 제곱근(피타고라스 정리를 이용한 유클리드 거리) L2노름

  • \(L_2\) Norm by Python : np.linalg.norm(x)를 활용해 코딩한다.

2-4. \(L_1\) Norm과 \(L_2\) Norm의 차이

  • Norm의 종류에 따라 기하학적 성질이 달라진다.
  • 원(원점에서부터의 거리)의 모양이 다르다. (원이 거리 개념이므로 거리 개념이 달라지면 그래프의 모양 역시 달라지게 된다.)
  • 머신러닝에선 각 성질들이 필요할 때가 있으므로 둘 다 사용한다. (기계학습 방법론에서 굉장히 다른 Norm들을 활용하여 최적화 혹은 학습에 사용한다.)
  • \(L_1\) Norm의 예 : Robust한 학습, Lasso 회귀 방법론
  • \(L_2\) Norm의 예 : Laplas 근사, Lidge 회귀

2-5. 두 벡터 사이의 거리 구하기

  • 각 Norm마다 거리가 다르다.
  • 두 벡터 사이의 거리를 계산할 떄는 벡터의 뺄셈을 이용한다.

2-6. 두 벡터 사이의 각도 구하기

  • \(L_2\) Norm에서만 각도를 구할 수 있다.
  • 유클리드 거리를 계산한 후 \(0\)벡터와의 삼각형으로부터 제2코사인 법칙을 통해 각도를 구할 수 있다.
  • 일반적인 d차원 공간에서의 각도 역시 구할 수 있다. Note 내적 : 성분곱의 합을 의미한다. Python에서 np.inner를 활용해 코딩할 수 있다.

2-7. 내적의 해석

  • 정사영된 벡터의 길이와 관련되어 있다.
  • 정사영된 벡터의 길이는 코사인 법칙에 의해 “기존 벡터의 길이 x \(\cos (\theta)\)” 가 된다.
  • 내적은 정사영의 길이를 벡터 y의 길이 ‘y의 \(L_2\) Norm’만큼 조정한 값이다.
  • 두 벡터의 유사도를 측정하는데 많이 사용한다. (두 데이터 혹은 두 패턴이 얼마나 유사한지를 확인함으로써 유사도를 측정한다.)

3. 행렬이 뭐예요?

3-1. 행렬이란?

  • 벡터를 원소로 가지는 2차원 배열
  • 행과 열이라는 인덱스를 가진다.(벡터는 인덱스가 하나(원소))
  • 틍정 행(열)을 고정하면 행(열)벡터라고 부른다.

Note : Numpy에서 행렬은 행이 기본 단위이다.

3-2. 전치행렬 그리고 행렬의 연산

  • 전치행렬(Transpose Matrix) : 행과 열의 인덱스가 바뀐 행렬 (벡터 역시 행벡터의 전치는 열벡터, 열벡터의 전치는 행벡터이다.)
  • 행렬끼리 같은 모양을 가질 경우 벡터와 마찬가지로 덧셈, 뺄셈, 스칼라곱 그리고 성분곱을 연산할 수 있다.

3-3. 행렬 곱셈

  • \(i_{th}\) 행벡터와 \(j_{th}\) 열벡터 사이의 내적을 성분으로 가지는 행렬을 계산한다.
  • 순서가 다르면 결과 역시 달라진다.
  • XY연산을 진행할 경우 X의 열의 개수(앞 행렬의 열)과 Y의 행의 개수(뒤 행렬의 행)가 같아야 행렬곱 연산이 가능하다.
  • Numpy에서 \(@\)을 활용하여 행렬곱 연산을 할 수 있다.

Note : Numpy의 내적(np.inner)를 행렬 사이에서 활용하게 되면 각 행렬의 행간 내적을 연산하므로 주의하여 활용하도록 한다.(‘X’와 ‘Y의 전치’를 np.inner를 통해 연산할 경우 행렬곱과 동일하다.)

3-4. 행렬을 이해하는 방법

  • 벡터가 공간상에서 한 점을 의미했다면 행렬은 여러 점을 의미한다.
  • 벡터 공간에서 사용되는 연산자로 이해한다.
  • 두 데이터를 연결시키는 하나의 연산자로 이해할 수 있다.
  • m차원 공간에서 n차원 공간으로의 연결을 해주는 함수의 역할로 이해할 수 있다.
  • 행렬곱을 통해 벡터의 차원이동을 할 수 있다.
  • 행렬곱을 통해 패턴 추출 및 데이터 압축을 할 수 있다.
  • 모든 선형변화는 행렬곱으로 계산할 수 있다.

Note : 행렬을 이해해야만 기계학습에서 사용되는 선형모델과 선형변화들을 이해할 수 있으며 딥러닝은 선형변환과 비선형 함수들의 합성으로 이루어져 있기 때문에 딥러닝을 이해하는데 있어서 행렬곱에 대한 이해가 필수적이다.

3-5. 역행렬 이해하기

  • 어떤 행렬 A의 연산을 거꾸로 되돌리는 행렬
  • 행과 열의 수가 같고 행렬식이 0이 아닌 경우에만 계산 가능
  • Numpy에서 np.linalg.inv(X)를 통해 계산할 수 있다.
  • 만약 역행렬을 계산할 수 없을 경우에는 유사역행렬 혹은 무어펜로즈 역행렬을 이용할 수 있다.(pseudo-inverse or Moore-Penrose)
  • 유사 역행렬의 경우 n, m의 크기에 따라 식의 순서가 달라진다. (A+(유사역행렬)을 구하는 식의 순서가 달라짐) - 이는 행렬의 차원을 확인함으로서 알 수 있다.
  • Numpy에서 np.linalg.pinv(X)를 통해 계산할 수 있다.

3-6. 유사역행렬을 활용한 예시

  • 변수의 개수가 식의 개수보다 많을 경우, 유사역행렬을 활용하여 무수히 많은 해 중 한 개를 구할 수 있다.
  • 데이터의 개수가 변수의 개수보다 많거나 같을 경우 선형회귀 분석에서 유사역행렬을 활용하여 데이터를 선형모델로 해석하는 선형회귀식을 찾을 수 있다.
  • \(L_2\) Norm을 최소화하는 계수 \(\beta\)를 찾게되면 선형모데을 이용해 주어진 데이터를 잘 표현했다고 이야기 할 수 있다.
  • 회구분석을 돌릴 때에넌 y절편 항을 항상 같이 고려해야한다.(sklearn과 np.linalg.inv를 활용했을 때의 차이가 이러한 이유이다.)

4. 과제 수행 결과물 by Colab

4-1. 필수 과제 Basic Math

Open In Colab

4-2. 필수 과제 Text Processing 1

Open In Colab

4-3. 필수 과제 Text Processing 2

Open In Colab

5. 피어 세션

5-1. 팀명

  • Pick Me (나를 뽑아 조)

5-2. 모더레이터 & 서기

  • 모더레이터 할 일
    • 강의 리뷰
    • 질문 취합
    • 멘토 미팅 설정
    • 그 외 이슈 처리
  • 서기 할 일
    • 회의록 작성 및 업로드, 금일 해결하지 않은 문제 취합

5-3. 그라운드룰

  • 호칭은 ‘~님’
  • 상호존중
  • 쉬운 질문이라도 무시 않기
  • 충분히 고민한 후 질문하기
  • 부득이한 사정으로 인한 피어세션 불참시 당일 19시 이전에 사유 공지하기
  • 모더레이터 불참 시 익일 예정된 모더레이터로 대체
  • 개익 학습 정리에 대한 활발한 상호 피드백 지향
  • 개인 스터디 노트 공유

5-4. 협업툴

  • 회의록 작성 : GoogleDOc
  • 코드 리뷰 : Github, Colab
  • 소통 : Slack, KakaoTalk, Zoom

5-5. 피어 세션 스케줄

  • 질답
  • 개인 스터디 노트 공유 및 코드 리뷰
  • 상호 피드백

6. 1일차 후기

피어 세션을 위한 내용 습득, 정리와 스스로의 기록을 남기기 위한 정리를 진행하다 보니 많지 않은 양이라도 공부를 진행하는데 상당히 오랜 시간이 걸린다는 것을 알게되었다.

내용은 분명 그리 많지 않고 어렵지 않지만 누군가에게 설명할 수 있을 정도의 내 것을 만드는 것은 역시 어렵지 않다는 걸 알 수 있었고 그동안 공부한 것이 왜 자꾸만 남는 게 없었는지도 느낄 수 있는 시간이었다. ㅜㅜ

더불어, 팀원들과 함께 진행하다보니 여러가지로 의무감 및 공부 의욕을 한 걸음 더 증진시켜줬던 것 같다.

앞으로도 더욱 열심히 해서 좋은 동료들, 좋은 실력들 모두 얻어갈 수 있으면 좋겠다!




© 2019.04. by theorydb

Powered by jjonhwa