ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [week4] 네부캠 ai tech 4주차 회고
    et al/AI Tech 6 2023. 12. 1. 19:59

    2023.12.01. 금요일

    네이버  부스트코스 ai tech 6기에 참여하고 4주가 흘렀다. 4주차 회고를 작성한다.

    주차별 학습 내용 목차.

    더보기

    1주차 : 파이썬 기초 문법, 객체 지향 프로그래밍, 넘파이, 판다스, 기초 통계(MLE, 베이즈통계), 기초 선형대수학,

               AI기초(경사하강법, CNN, RNN)

     

    2주차 : pytorch

     

    3주차 : DL basic(~transformer, Genertive models)

     

    4주차 : 기본 모델들(AlexNet ~EfficientNet, Semantic Segmentation, Object Detection )

    * 짧은 소감 

    - 피어세션

    딥러닝 기초 강의를 들으면서 생긴 질문들을 해결했다. 파이토치 코드에 대해 많이 질문했었다. 

    이번주 질문 내용을 아래에 정리해봤다.

     

    Q1. efficientNet 성능을 보여주기 위해 아래 그래프에서 FLOPS와 계산복잡도에 대한 개념 질문.

    더보기


    강의에서 FLOPS를 계산복잡도(computational complexity)의 의미로 설명합니다. 그런데 각각 찾아보니 FLOPS는 연산 속도, 계산복잡도는 연산량으로, 서로 다른 개념이라고 이해했습니다. 그래서 강의에서 FLOPS와 계산복잡도를 왜 같은 의미로 해석하는 지 잘 모르겠습니다. FLOPS는 계산복잡도를 나타내는 컴공의 관례적 표현인가요?

    A1. FLOPs는 부동소수점 연산 (FLoating point OPerations)의 횟수. 즉 몇번의 연산을 해야하느냐 라고 받아들일 수 있다. 기계학습 영역에서는 계산복잡도, 연산복잡도, 연산량 등의 표현과 (사실상) 동치로 쓰인다.컴퓨터 공학에서의 알고리즘을 분석할 때는 주로 시간복잡도와 공간복잡도를 big-O notation으로 표기하긴 하는데, 시간복잡도 = FLOPs, 공간복잡도 = 파라미터 수 정도로 생각할 수 있긴 하다.

     

    Q2. Inception v1을 공부하다가 논문에 나오는 파라미터 수와 제가 직접 계산한 파라미터 수가 맞지 않음. why?

    더보기

     

     

    첫 번째의 conv의 파라미터가 논문의 도표에서는 2.7K로 계산됩니다.

    그래서 직접 bias를 제외하고 계산해보면,  input shape이 (224,224,1)이므로

    이미지의 채널 수 * 필터사이즈 * 필터 개수 = 177*64 = 3136으로 3.1K가 나옵니다.

     

    다른 예시로 논문 도표에서 Inception(3a)의 파라미터 수는 159K입니다.

    아래 그림에 따라 bias를 제외하고 계산해보면,

    이전 layer의 shape이 (28,28,192)이므로,

    가지1 : 19211*64 = 12288

    가지2 : 1921196 + 9633128 = 129024

    가지3 : 1921116 + 165532 =  15872

    가지4 : 19211*32 = 6144

    총합 = 163328 =163K이처럼 이론대로 계산한 값이 논문보다 더 크게 나오는데, 왜 오차가 발생하는 건지 궁금합니다~!

     

     

     

    A2. Convolution factorization에 의해 계산된 값은 맞는 듯 합니다. 일단 2.7k는 7*1 / 1*7 커널을 사용하고 있다고 가정해야 계산이 됨.
    (7+7)[커널 매개변수] * 3 (입력 채널 수, RGB) * 64 (출력 채널 수) + 64 (편향) = 2752
    2.7k가 2764 이므로 근사치로 계산할 수 있어보임.

     

    Q3. 보조분류기(Auxiliary Classifier)에 소프트맥스를 어떻게 적용하는가? -> 코드 구조에 대한 이해가 필요.

    더보기

    A3. corssentropyloss 안에 softmax가 있다.

    GoogLeNet 코드를 보면 forward의 return값이 보조분류기 1, 2이다.

    class GoogLeNet(nn.Module):
        __constants__ = ["aux_logits", "transform_input"]
    
        .... 중략 ...
        
        
        def _forward(self, x: Tensor) -> Tuple[Tensor, Optional[Tensor], Optional[Tensor]]:
            
            ... 중략 ...
    
            x = self.avgpool(x)
            # N x 1024 x 1 x 1
            x = torch.flatten(x, 1)
            # N x 1024
            x = self.dropout(x)
            x = self.fc(x)
            # N x 1000 (num_classes)
            return x, aux2, aux1 # aux는 Auxiliary Classifier의 약자

     

     

    - 스페셜피어세션 진행.

    오늘은 좀 편안한 분위기로 진행됐던 것 같다. 잡담을 많이 했고,

     

    - 스페셜 세션(이고잉님의 깃허브 특강)

    천천히 반복해서 알려주는 방식이 좋았다. 키워드의 나열로, 다시 또 공부해야하는 게 아니라 천천히 여유있게, 그리고 소통하면서 강의하는 방식이 너무 좋았다.

     

    - 멘토링
    이번 화요일 멘토링 시간에는 강의를 들으면서 생긴 질문들을 해결하는 시간을 삼사십분 가량 가졌고, 저번주처럼 면접 질문에 대해 답해보는 시간을 가졌다. 언제나처럼 유익했다!

     

    * 진행한 내용

    이번주 목요일에 피어세션 때 Inception v1(GoogLeNet)을 발표했다. 꽤나 공들여서 준비했는데, 공부하면서 코드구조에 익숙해질 수 있었고, 아주 큰 도움이 되었다. 

    조금씩 성장해가고 있는 게 느껴진다. 이제 모델의 코드 구조가 눈에 보이기 시작했다. 모델에 대한 이해도가 높아졌고, 파이토치에 대해 익숙해져가는 것이다. 클론 코딩 혹은 이번주 과제처럼 직접 구현해보는 연습을 많이 해봐야 함을 느꼈다. 기억력이 안 좋은 지, 파이토치의 중요 api들을 자꾸 잊어서, 연습이 더 필요하다. 아쉬운 점은 시간관리이다. 계획을 잘 짜야겠다. 요즘 지치기 시작했는지, 집중력도 떨어지고 있는데, 동기부여 및 구체적인 목표 설정이 중요한 것 같다.

     

     

    * 주말 계획

    1. 밀린 코테 진행.(이건 이제 포기상태...)

    2. 강의 및 과제 복습 (2주차, 3주차,4주차... 왜 늘어나기만 하는 것 같지?)

    3. 시각화 강의 (ㅜㅜ)

    4. 배치정규화, 풀링에 대해 구체적으로 조사해보자.

     

    * 다음주 계획

    6주차부터 대회를 시작한다. 그래서 모델을 구현을 연습하기로 했다. 다음주 금요일까지 각자 모델을 구현하기로 약속했다. 대회의 1등을 목표로 하진 않고, 구체적으로 시간을 들여 모델을 깊게 파보는 연습과 이후 대회 종료 일주일부터는 그래도 꼴등은 면하기 위해 열심히 달려볼 예정이다. 나는 이번에도 GoogLeNet을 맡았다. 이번에 스터디 발표를 준비하면서 생각보다 익숙해졌는데, 구현해보면서 파이토치에 익숙해져야겠다.

     

    < 목표 >

    1. 앞으로 어떤 산업분야, it 도메인 혹은 비it 도메인 어디로 나아가야할 지 많이 찾아보고, 물어보고 고민해보자. -> 

    2. 멘토님이 추천해주신 자료를 보면서, 수학 기초를 쌓자. , 유튜브 -> 이번주에 진행 못함.
    3. 프레임워크에 익숙해지자. 또한 수식과 코드를 연결하는 공부를 하자.

     

     

    * 공부 내용 링크 

    2023.11.28 - [et al/Docker&git] - [git] vscode로 git commit 하는 법

    2023.11.28 - [et al/Docker&git] - [git] commit이해하기

    2023.11.28 - [et al/AI Tech 6] - [멘토링]

    2023.11.29 - [et al] - [리눅스 명령어] 파일/폴더 생성 및 삭제 방법

    2023.11.29 - [et al/Docker&git] - [git] 기본 명령어 정리

     

    'et al > AI Tech 6' 카테고리의 다른 글

    [week5] 네부캠 ai tech 5주차 회고  (2) 2023.12.08
    [멘토링] 5주차 멘토링 정리  (0) 2023.12.08
    [week3] 네부캠 ai tech 3주차 회고  (1) 2023.11.24
    [멘토링-3] 멘토링 정리  (0) 2023.11.24
    [멘토링-2] 멘토링 정리  (0) 2023.11.17

    댓글

Designed by Tistory.