[네이버 부스트 캠프] AI-Tech-re - week1(2)

학습기록 - 2

오늘 한 일

  • 필수 과제 4
  • AI-math 1,2,3, 4, 5, 6강, Quiz 7, 8
  • 피어) Quiz 1,2,3 / AI-math 1,2,3,4 / 필수 과제 4,5

1. 강의 복습 내용

  1. string 관련 문제를 많이 헤맨다.

  2. string 활용, map, filter

  3. numpy, pandas 에 대해 공부하긴 했는데.. 아직 부족함이 느껴진다.

  4. AI math

  • 행렬, 벡터
    • L-norm : 변화량의 절대값 L2-norm : 유클리드 거리 ex)피타고라스
  • 무어펜로즈 유사역행렬
    • 일반 역행렬은 행과 열이 같을 때(m=n), determinent = 0일 때 성립한다.
    • 유사역행렬은
      n>=m (행>=열) 일 때, $ A^{+} = (A^{T}A)^{-1}A^{T} $
      n<=m (행<=열) 일 때, $ A^{+} = A^{T}(AA^{T})^{-1} $
  • 선형회귀분석 시,
    $\mathbb{X}\beta = y\hat{} \approx y$ 추정 y(hat)값과 실제 y값의 L2 노름을 최소화하는 값을 찾을 때 이용할 수 있다.

  • 경사하강법/확률적경사하강법(SGD)
    • 유사역행렬이 아닌 경사하강법을 이용해서 구할 수 있다.
    • 선형 회귀의 목적식은
      $\left || y - \mathbb{X}\beta \right ||_{2}$ 이것이고 이 식의 그레디언트 벡터를 구해서
      $\beta$ 를 최소화하는 값을 찾는다.

      $\beta^{(t+1)} := \beta^{(t)} + \frac{2\lambda }{n}X^{T}(y - X\beta^{(t)})$

  • 경사하강법은 실제 코드에서 조금 더 효율적으로 계산하기 위해서 mini-batch를 두어 적은 양의 데이터로 경사하강법을 적용시켜 전체적인 경사하강법을 추정한다.

  • softmax
    • 분류 문제에서 확률 변수 데이터 x로부터 추출된 특징 패턴과 가중치 행렬을 만들어내고 이를 통해 조건부 확률을 계산해서 나타낸다.
      (mult-classification에서 가중치를 만들어줄 때 쓰인다.!)
  • ReLU, Sigmoid
    • 딥러닝에서 classification과 같은 비선형 모형을 다룰 때 활성함수로서 ReLU, sigmoid, tanh(x) 등의 비선형 함수를 이용해서 분류를 다룬다.
  • Backpropagation (역전파 알고리즘)
    • 신경망은 선형 모델과 활성함수를 합성한 함수다.
      순차적인 신경망 계산을 forward propagation (순전파)라고 한다.
    • 순차적으로 계산된 파라미터의 그레디언트 벡터는 윗층부터 역순으로 계산한다. (연쇄법칙 이용, 그레디언트 벡터 전달)

      • 이 단계를 통해 최적의 파라미터를 구할 수 있다.

2. 고민 내용, 결과 (과제 수행 과정, 결과물 정리)

  1. 과제 수행 과정

    • 문제에 대한 이해를 빠르게 하기 위해 우선적으로필요한 조건들을 스티키 메모 를 이용해서적었다.
      메모장을 이용해서 논리적으로 간단하게 구성했고,pythonic한 코드를 만들기 위해 주어진 함수들의 역할을 적어 생각했다.
     # 예시
     1. 오류처리
      - 문자 "Wrong Input"
      - 실수  "Wrong Input"
      - 중복 숫자  "Wrong Input"
      - 게임 재시작 ( 대소문자 상관 x
          - , y, yes, Yes / No N no
          - 이외  "Wrong Input"
      - 게임중  0(숫자) 입력 시
    
     2. 함수
     is_validated_number -> is_digitis_between_100_and_999, is_duplicated_number
    
     get_strikes_or_ball
     is_yes
     is_no
    
     3. 시작 시
     - Random Number is : xxx 문자 출력
    

    이번에 주어진 야구 게임 과제에서 조금 고전했다.
    가장 시간이 오래걸렸던 것은 먼저,

    1. 문제에 대한 이해 - 문제의 길이가 생각보다 길어서 다 이해하는 데에 좀 어려움이 있었다. 조건도 많고 주어진 함수가 많아서 당황했기 때문에 시간이 많이 걸렸다.
    2. string, int, list - 이 3가지 변수를 자유자재로 바꾸는 것에 좀 헤맸다.
      자료형을 이해하고도 바꾸지를 못해서 구글링을 하고 더 쉬운 방법을 생각하느라 시간이많이 걸렸다.
    3. 조건문 - 이건 문제에 대한 이해와 연관되어 지는데, 문제를 논리적으로 구성해서 pythonic한 code를 만들고 싶었는데
      조건 문제에서 꼬여서 Test Case를 자꾸 통과하지 못했다.
  2. 결과

  • 마지막 조건인 게임 중 0 숫자 입력하는 부분을추가하지 못해서 테케를 못 넘어갔던 것을 알아채서
    수정하고 마쳤다.

string, int, list, .. 등에 대한 내용은 자료에서제대로정리 해봐야겠다.
또 다른 문자열에 대비하기 위해..

3. 피어세션 정리

  1. 강의 요약 발표
    • 내용: Numpy, Pandas
  2. 과제 코드 리뷰 및 질문
    • [필수 과제 1] Basic Math
    • [필수 과제 3] Text Processing 2
  3. ‘피어세션이 피어(peer)씁니다’ 이벤트 준비
    • 팀 소개(미완성), 팀 각오(완성), 그라운드 룰(완성)
  4. 팀 github 참여

4. 회고

Baseball 게임에서 논리적 구조를 먼저 생각하기 보다는 함수의 기능 구현을 정해놓고 그 기능을 다 짠 다음에 블럭처럼 main에서 맞춰주는 것이 좀 더 효율적인 것 같았다. 다음 과제에서는 함수를 먼저 다 짠 다음에 블럭으로 맞춰야겠다.

아직 string 관련 문제에서 부족함이 많이 느껴진다. 정의를 외우는 것도 중요하지만 활용을 많이 해보는 경험이 더 중요한 것 같다. string 관련 문제를 많이 풀어보기 위해 스터디로 코딩 테스트를 제안하고 문제 활용을 많이 해봐야겠다.
string 관련 메소드

  string.isdigit() : '문자열' 안에 숫자가 있는지
  int(string) : '문자열'이 '정수 또는 실수'라면 int형으로 바꿔준다.  
  list(map(int, string)) : '문자열' 각각의 문자를 int형으로 mapping 후, list로 만들어준다.  
  string.split() : '문자열'에 '공백'이 있을 경우 공백을 기준으로 나눠서 list로 만들어준다.  
  string.lower() / .upper() : 대/소문자로 변환
  string.capitalize() : 첫문자를 대문자로
  string.title() : 띄어쓰기 후 첫글자만 대문자
  string.find("str") : 문자열 'str'의 오프셋 반환

할 일이 너무 많은데 머리가 그만큼 못따라 주는 기분이다.
과제 푸는 속도도 느린 기분이고, 이론도 정확한 이해가 되지 않은 것 같다. 질문이 많이 있는데 정리도 안된다.
조금만 천천히 생각정리를 하면서 공부 내용을 정리해야할 것 같다.