1.19(수) - 파이썬, AI math

ivor·2022년 1월 23일
1

부스트캠프 AI TECH

목록 보기
3/18

본 게시물은 '부스트캠프 AI TECH 3기' 과정을 통한 학습을 기반으로 합니다. 부스트캠프 측에서 제공되는 자료와 다른 점이 있을 수 있고, 잘못된 부분이 존재할 수 있습니다. 지적이나 조언 달게 받겠습니다.


매일매일 하루의 회고를 하겠다는 다짐은 심화 과제를 만나면서 무참히 깨졌다.
기본 과제는 순한맛, 심화 과제는 매운맛이라더니...
평소에 새벽 2시 정도에 잠드는데 4시까지 과제를 붙잡고 있어도 해결되지 않았다.(다음날 팀원분의 조언으로 아주 쉽게 해결한 것은 비밀. 누군가와 함께 공부한다는 것은 생각보다 도움이 많이 된다.)

학습한 내용 중 중요하다고 생각되는 부분이나 궁금한 부분, 잘 이해되지 않는 부분들을 위주로 정리하겠다고 생각한 건 현명한 판단이었다. 1주차, 기초를 다지는 과정에서도 복습만으로 하루가 다 가는데 본격적인 팀 프로젝트가 시작되면 더욱 시간이 없을 것이다.

다만 앞으로는 핵심만 짧게 올리더라도 매일 회고록을 써야겠다.
5개월의 여정동안 다른 것을 바라지는 않기로 했다. 꾸준히, 익숙해지기를 제외하고는.


파이썬

pythonic code

  • 예를 들어 리스트에 여러 단어(혹은 문자)가 저장되어 있고 이 단어들을 하나의 문장으로 합치고 싶다면?
    • 한 가지 방법으로는 for loop을 이용해서 빈 문자열 변수에 list 원소들을 하나하나 차례로 넣을 수 있다.
    • 또 다른 방법으로는 ''.join()을 사용할 수 있다.
    • 혹은 list comprehension을 사용할 수 있다.
  • 이런 식으로 보다 python스러운 코드를 pythonic code라고 한다.
    • 하지만 첫번째 방법이 틀린 것은 아닌데, 왜 굳이 pythonic code를 알아야 하는가?
      • 파이썬은 라이브러리가 굉장히 잘 되어 있는 언어이다. 타인이 만든 라이브러리 등을 이용할 때, 대개의 경우 pythonic code로 쓰여있기에 이를 알아야 보다 쉽게 해당 코드를 이해하고 사용할 수 있다.
      • 또 (미세할지라도) 좀 더 효율적이다.
  • split()
    • str1.split(~)
      • 문자열을 ~를 기준으로 자른다. default는 공백(' ')이다.
        • 만약 어떤 단어 사이에 공백이 여러개라면 공백 하나로 취급하여 자른다.(디폴트의 경우)
        • 자르는 기준에 공백을 넣는다면?
        str1 = "abc    def" # abc, def 사이에 공백 문자 4개
        print(str1.split())
        print(str1.split(' '))
        ['abc', 'def'],
        ['abc', '', '', '', 'def']
        결과는 위와 같다. 디폴트의 경우 여러 공백도 하나로 여겨서 단순히 'abc,'def'를 원소로 갖는 리스트를 반환하지만 공백문자를 기준으로 넣는다면 기준이 되는 공백문자 하나를 제외한 나머지 3개의 공백문자도 원소로 갖는 리스트를 반환한다.
  • list comprehension
    • ex) result1 = [char1+char2 for char1 in word1 for char2 in word2]
      위의 코드는 다음과 같은 결과를 만들어 낸다.
    word1 = "~"
    word2 = "~"
    result1 = []
    for char1 in word1:
        for char2 in word2:
            result1.append(char1+char2)
  • 2D list
  • enumerate()
  • zip()
    • 여러 list를 병렬적으로 묶어줌
  • lambda()
  • reduce()
  • map()
  • iter()
  • generater, yield
  • asterisk
    • 가변인자 *arg
    • 키워드 가변인자 **kwarg
    • unpacker
      • a = [1,2,3,4,5]
        print(a)
        print(*a)

python OOP

OOP(Object Oriented Programming)

  • class ~
    • naming rule : camelCase
      cf) snake_case
    • def __init__
    • def function1(self, ~)
  • OOP characteristics
    • inheritance
    • polymorphism
    • visiblity
  • others
    • first-class function
    • inner function
    • decorator

module and project

  • 모듈이란?
  • 패키지란?
  • 모듈과 패키지를 기준으로 하는 프로젝트의 구성?
  • from ~ import ~ as
  • 경로
    • 절대경로
    • 상대경로

math

벡터, 행렬

  • 벡터의 정의
  • 행렬의 정의
  • norm
    • L1-norm
    • L2-norm

경사하강법(Gradient Descent)

  • loss function
  • loss function의 최솟값, 최솟값을 찾는 방법 중 하나
    • 편미분(partial differentiation)
    • gradient vector
    • 행렬을 이용한 식의 표현
      • 복잡한 수식을 행렬을 이용해 간명하게 표현하는 테크닉이 필요
      • 또 그렇게 표현된 gradient vector와 loss function을 python을 이용해 코딩하는 테크닉이 필요
  • GD in python
    • 종료조건(epsilon)의 필요성
    • learning-rate의 중요성
  • GD는 모든 문제에서 적용 가능한가?
    • 비선형회귀 문제의 경우 최솟값에의 수렴은 항상 보장되지는 않음.
  • SGD(Stochastic Gradient Descent, 확률적 경사하강법)
    • mini-batch
    • GD, SGD의 error 비교
    • HW적 측면에서의 효율성

Questions

  • module, package에서의 절대 경로, 상대 경로는 정확히 어떤 방식?
  • AI, ML, DL을 구현함에 있어 중요한 python 구문에는 또 무엇이 있나?
  • SSE, MSE, RMSE 등 loss function을 표현하는 다양한 방법에는 무엇이 있고 어떠한 차이점이 있는가?
    • loss function 표현 방식의 선택이 기계 학습에 어느정도 중요할까?

회고

  • python은 어느정도 익숙하기에 어렵지 않았으나 math 부분이 어려웠다.
    • 특히 경사하강법에서 loss function과 gradient vector 식을 전개하여 그것을 적절한 행렬식으로 변환하는 과정이 어려웠다.
    • 강사님도 '이해'보다는 '익숙해지기'를 강조하신만큼 여러번의 복습만이 답이겠지.
    • AI 엔지니어링을 위해 필요한 수학적 지식의 범위가 어느정도인지 감이 잘 오지 않는다. 선형대수, 확률, 통계는 중요하다고 들었는데 해당 부분을 어떻게 공부해야할지...
profile
BEST? BETTER!

0개의 댓글