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

학습기록 - 11

오늘 한 일

  • 우선순위 큐 알고리즘 정리
  • 파이토치 강의 정리 ( 1, 2, 3)
  • 필수 과제 - ~ nn.module 까지
  • 피어) 파이토치 강의 요약 발표 & 알고리즘 요약 발표 & 필수 과제 풀이

1. 강의 복습 내용

Pytorch

  1. PyTorch VS TF

    현재 있는 데이터를 그래프로 그린 후 Back Prop VS 현재 시점에서 그래프를 그린 후 Back Prop

    • Computational Graph

      • Define and Run : TF 실행 전 그래프 정의 후, 실행 시점에 데이터 feed 장점 : production and scalability

      • Define by Run : PyTorch 실행 하면서 그래프 정의 장점 : Pythonic Code / GPU Support, Good API and community / 편함

    s1

    Pytorch : Numpy + AutoGrad + Function(DL)

  2. Pytorch vs numpy

    • Pytorch는 numpy 기능과 함께 AutoGrad 기능을 지원

    • Tensor : 다차원 Arrays 표현 ( = numpy.ndarray )

    • Tensor는 Data 또는 Array 로 표현 가능하다.

    • Tensor의 operation은 numpy에서 사용하던 방법 그대로
      + GPU에 올려서 사용 가능
      + view ( ~= reshape, contiguity 보장 차이)
      squeeze (차원의 개수가 1인 차원을 삭제.)
      , unsqueeze (차원의 개수가 1인 차원을 추가.)

    • +, - 는 동일 (차원 맞을 경우)
      dot : 내적, 행렬 곱셈 x
      mm : 행렬 곱셈 o, broad casting x
      matmul : 행렬 곱셈 o, broad casting o

    • Auto Grad PyTorch 구조 이해하기

      s1

    • jupyter notebook은 프로젝트 개발에 있어서 한계가 존재. -> 블록화 (모듈 분리) / 다양한 프로젝트 템플릿 사용

    • 그림으로 표현

      s1

우선순위 큐

  • 우선순위 큐 정의 s1

  • 힙에 의한 큐 s1 s1

  • Priority Queue에 의한 큐 s1 s1

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

  1. 필수 과제 : Custom model 개발

    과제에 주어진 튜토리얼에 따라 파이토치 document 읽기, 예제 활용

    • 고민 : 임의의 크기의 3D tensor에서 대각선 요소 모으기 - 3D gather 어떻게 expand를 이용해서 대각행렬을 뽑아낼 수 있을까?
      2차원으로 만드는 방법?

3. 피어세션 정리

  1. Pytorch 관련 튜토리얼과 개요이기 때문에 많이 어려웠던 점이 없었다.

  2. 필수 과제 풀면서 어려운 점 질문, 양이 많아서 제대로 하지 못했다.

  3. 선택과제 리뷰를 하려고 했으나, pytorch를 배우면서 다시 해보기로 결정. (너무 어렵다.)

4. 학습 회고

  1. 발표 정리에 시간을 다 써서 필수과제와 Data Viz 강의를 제대로 듣지 못했다.
    Data Viz에 대한 시간을 어떻게 활용해야 할지 고민이다.
    이번 과제는 엄청 유익하다고 생각하는데, 영어를 제대로 받아들이지 못해서 어려움을 느꼈다.
    하지만 꾸준히 하면 늘 것 같다.

  2. 마스터 클래스

프로그래머 산다는 

 되려고 하는가? .. 만들고 싶은게 있다

1-1 개발 경력이 있는 분들도 못하는 사람이 너무 많다.  

1-2   벌어지는 것일까?  상황을 어떻게 피할 것인가?  
     시간만 정해져 있을 , 검색 -> 복사 & 붙여넣기 -> 되는 것처럼 보일 때까지  
      => 이렇게 되면 실력이 그렇게 된다.

1-3 이렇게 되는 주역이 누굴까?  
  나쁜 고객과 상사 + 탐욕스러운 회사 + 비협조적인 동료 (사람들이 변화를 두려워한다.)  
  --> 통제할  없는 외부요인 (그냥 발생할 일이다.)  
   자신을 성장시키고 지켜낼  있으려면?  

1-4 개발자의 필수 능력

  1. 깔끔한 코드 :  
      - 사람이 이해하기 쉬운 코드  
        ( Readability )

      - 코드를 작성한다 하면은 다른 사람이 고칠  있게 만들어줘야 한다.  
        ( ex- for문에서 I,j)

      - 변경이 용이한 코드

      - 유지보수 비용이 낮은 코드

      "나는 코드를 지우는 사람 ( 유지보수 ) 이다!"

  2. 적절한 논리력 : 극단적 논리력이 아닌 적절해야 한다.
         ( 현재의 문제, 지금 가용가능한 자원 내에서 가장 적합해야 한다. )
          제약 조건을 고려한 해법
         ( 계속 반복하면서 숙련하자. )
          단순한 디자인

1-5 깔끔한 코드 작성법

- 고객 입장에서 만족스러운가? ATDD (Acceptance Test Driven Development)

- 개발자 입장에서 만족스러운가? TDD (Test Driven Development) 
  ->  중요, 내일  상세히🎉

  1. 사용하는 코드만 만들기 (Caller Create)

      - 언제나 사용 가능한 코드만 만든다.
      - Dead Code는 지워버린다. ( 버전관리시스템 이용하기 )

  2. 리팩토링 (Refactoring)
      - 외부의 속성이 변하지 않고, 내부를 바꿀  있는 능력
      - 다시 보면서 확인하는 

  3. 코드 읽기 (Code Review)
      - 다른 사람의 코드 리뷰를 통해, readability를 늘려야 한다.
      - pull request

      ![s1](/assets/images/AI-Images2/week3/img10.png)


1-6 적절한 논리력

- 복잡한 문제를 가장 작은 단위로 잘라서 점진적으로 해결하자.

  1. 알고리즘과 데이터 구조
  2. 단순한 디자인
  3. 진화적 디자인
  4. 협업
  5. 기술 벤치마킹

1-7 실천법

  1. 꾸준한 연습 (Daily Pratice) -> 매일 매일 연습하면서 고치자.
  2. 매일 몸값 올리는 시간을 가져라.  (연습하는 시간)
  3. 멀리 가고 싶다면 함께 가라.  (동기들과 같이 실천하자)
  4. 현재 필요한 만큼만 하라.  ( 필요한 만큼만 하라, 미래를 생각해서  하지 말자.)
  5. 간단하게 하라.

2-1  좋은 00 개발자. AI!

  1. 00 -> 분야가 다양 & 시간 변동 -> AI가 특별하지 않은 순간이   있다.
    -> 전문성이라고 해서 하나가 전부라고 생각하지 말자.
  2. 좋은 -> 공유 + 협업

  시간 변동성이 없다. 당연히 갖춰야 한다.

2-2 공유하는 이유 ?

  1. 현실적인 목적은? 주변이 똑똑해져야 내가 편함
    -> 사고를 수습하는 일이 줄어든다.
    -> 중요한 일을  여유를 가질  있음.

  2. 좋은 평판을 얻을  있음.
    -> 경력 3~5년부터는 스카우트가 오게 된다.

  3. 주변의 덕을  확률이 올라감.

2-3 공유 대상

  1. 실패한 이야기 : 내가 실패했을 , 해결했던 과정 / 다른 사람들의 실수를 없애 주는 

  2. 새로운 기술 공유 : 내가  기술을 시도해보고, 장단점에 대해  생각을 해보는 

  3. 성공한 이야기 : 잘난 척이 아닌, 내가 직접하는 회고

  4. 재밌는 이야기

2-5 협업의 전제 조건 : 상대를 이해하자.

  1. 기획자, 개발자, QA

2-6 협업의 필수요소 : 자아존중감. 인정할거 인정하고, 상처는 받지 말고  스스로를 지키자.

  - 사고를 치면서 긍정적으로 생각하자. 실패해야 안다.

3-1 좋은 개발자.


![s1](/assets/images/AI-Images2/week3/img8.png)


꾸준함! 연습! 실천!