Naver Boostcamp 18

[Pytorch 기본]hook(pre forward hook, forward hook, backward hook)

1. Hook hook이란 패키지를 만드는 코드에서 중간에 원하는 코드를 삽입할 수 있는 기능이다. 순전파 이후에 모델의 가중치를 변경하거나, 파라미터 업데이트를 실시간으로 확인하는 등, 내 입맛대로 바꾸고 싶은 모델을 일부 변형하여 사용할 수 있다. hook은 크게 Tensor에 적용하는 hook과 Module에 적용하는 hook으로 나눌 수 있다. 1-1. Tensor Tensor는 forward hook이 없고 backward hook만 적용할 수 있다. import torch tensor = torch.rand(1, requires_grad=True) def tensor_hook(grad): pass tensor.register_hook(tensor_hook) # 🦆 tensor는 backward..

Naver Boostcamp 2023.03.15

[Pytorch 기본]nn.Module

nn.Module nn.Module 클래스는 여러 기능들을 한 곳에 모아놓는 상자 역할을 한다. nn.Module은 빈 상자일 뿐 이를 어떻게 사용할지는 온전히 설계자의 몫이다. 기본적인 클래스에 대한 설명은 파이토치 공식 문서에서 확인할 수 있다. https://pytorch.org/docs/stable/generated/torch.nn.Module.html?highlight=nn+module#torch.nn.Module Module — PyTorch 1.13 documentation Shortcuts pytorch.org 기본 구조 x1과 x2를 입력값으로 주면 두 변수의 합을 반환하는 클래스를 만들어 보려 한다. import torch from torch import nn # TODO : Add 모..

Naver Boostcamp 2023.03.14

[AI Math] 경사하강법

1. 미분 미분은 변수의 움직임에 따른 함수값의 변화를 측정하기 위한 도구로, 머신러닝에서 최적화에 가장 많이 사용되는 기법이다. 고등학교 때 미적분을 들었다면 알겠지만 다음과 같이 표기한다. $f'(x)=lim_{h \to 0} {{f(x+h)-f(x)} \over {h}}$ 미분은 함수값의 변화량이자 함수의 기울기로 이해할 수 있다. 미분값은 함숫값을 증가시키거나 감소시킬 때 활용할 수 있다. 함숫값을 증가시키고 싶다면 미분값을 더하고, 감소시키고 싶다면 미분값을 빼면 된다. 함수의 극값에 도달하면 미분값이 0이 되어서 최적화 과정이 종료되게 된다. 이때 미분값을 더하는 방법을 경사상승법(gradient ascent)이라 하며, 함수의 극대값의 위치를 구할 때 사용한다. 반면 미분값을 빼는 방법을 경..

Naver Boostcamp 2023.03.12

[AI Math]행렬

행렬 행렬은 벡터를 원소로 가지는 2차원 배열이다. 행렬은 행과 열을 갖는다. 1. 행렬의 덧셈, 뺄셈, 성분곱, 스칼라곱 행렬끼리 같은 모양을 가지면 덧셈, 뺄셈, 성분곱, 스칼라곱을 계산할 수 있다. 벡터와 마찬가지로 각 인덱스 위치끼리 연산하면 된다. 2. 행렬 곱셈 행렬 곱셈은 앞 행렬의 열과 뒤 행렬의 행의 수가 같아야 한다. 만약 $X_{mn}$와 $Y_{nl}$을 곱하면 결과는 m행과 l열로 구성된 행렬이 된다. 연산 결과가 이렇게 나타나는 이유는 행렬곱이 내적을 통한 연산이기 때문이다. 즉 행렬의 각 원소는 앞 행렬의 i번째 행벡터와 뒤 행렬의 j번째 열벡터를 내적한 결과로 구성되며, 곱의 순서에 따라 값이 달라지므로 앞 행렬과 뒤 행렬의 순서를 바꿀 수 없다. 3. 행렬을 이해하는 방법 ..

Naver Boostcamp 2023.03.12

[AI Math] 벡터

목차 파이썬 다음으로는 임성빈 교수님의 AI Math 강의가 있었다. 이미 알고 있던 수학적 개념도 새로운 방식으로 설명해주셔서, 참신하기도 하고 어렵게 느껴지기도 하는 그런 시간이었다. ㅎㅎ 벡터 벡터는 숫자를 원소로 가지는 리스트 또는 배열이다. 파이썬에서는 numpy 라이브러리를 통해 나타낸다. 벡터는 크기와 방향을 가지는 양을 일컬으며, 원점으로부터 상대적 위치를 표현한다. 그러므로 크기와 방향이 같다면 평행이동하더라도 벡터는 모두 같은 값이다. 스칼라곱 벡터에 숫자(스칼라)를 곱해주면 벡터의 길이만 변하게 된다. 이때 스칼라값이 1보다 크면 벡터의 길이가 늘어나고, 0보다 크면서 1보다 작으면 벡터의 길이가 줄어든다. 만약 스칼라값이 0보다 작다면 벡터는 반대 방향이 된다. 벡터의 연산 벡터끼리..

Naver Boostcamp 2023.03.09

[Python] 객체 지향 프로그래밍, Numpy, Pandas

1주차의 내용은 대부분 pre course와 동일하고, 파이썬 문법이나 모듈 등 기초적인 내용이 대부분이라 강의자료로 복습하고 어려운 내용만 영상으로 복습하기로 했다. Python 1. 객체 지향 프로그래밍(Object Oriented Programming) OOP는 클래스와 인스턴스로 나뉨 이름 짓는 법 class명: 띄어쓰기 부분에 대문자 변수명: 띄어쓰기 부분에 "_" 추가 예) 변수 camel_case, 클래스 CamelCase OOP의 특징 상속: 부모 클래스로부터 속성과 Method를 물려 받은 자식 클래스를 생성 def __init__에 super().__init__() 을 삽입한다. 다형성: 같은 이름 메소드의 내부 조직을 다르게 작성 가시성: 객체의 정보를 볼 수 있는 레벨을 조절하는 것..

Naver Boostcamp 2023.03.07

[네이버 부스트캠프 AI Tech 5기] 온보딩 키트 / 주간 학습 일정

목차 1. 온보딩 키트 간단한 설문조사 후 온보딩 키트를 받았다. 택배 조회 어플에 '꺼진 배도 다시 보자'였나...? 웬 과자 세트가 뜨길래 누군가 택배를 잘못 시켰나 생각했는데 알고보니 온보딩 키트였다. ㅋㅋㅋㅋ 간단한 꿀팁과 스티커, 과자 세트가 담겨 있다. 다 살펴보지는 않았지만 과자 종류는 젤리나 감자칩 등등 다양하게 들어있는 것 같다. 운영진 분들께서 고심해서 고르셨다 하니, 감사히 맛있게 잘 먹겠습니다...! 2. 주간 학습 일정 적응 전 일정 (삭제) 적응 후 일정 (삭제) 빽빽한 일정표에서 보이듯 굉장히 빡셀 것 같다. 그만큼 얻는 것도 많겠지. 파이팅!

Naver Boostcamp 2023.03.06

[네이버 부스트캠프 AI Tech 5기] 합격 후기

목차 부스트캠프 AI CV전형에 합격했다. 사실 간당간당할 줄 알고 굉장히 긴장한 상태로 지원했는데, 추합이 아닌 최초합인 걸 보면 생각보다는 여유 있게 붙은 것 같다. 합격 이후 바빠서 글 쓸 엄두도 못 내다가 이제서야 쓰는 후기... ㅠ 1. 자기소개서/포트폴리오 자기소개서는 총 네 개의 문항이었고, 분량은 500자 혹은 300자 내외였다. 물론 '내외'라지만 혹시 모르니 정해진 분량보다 글자수를 아주 약간 모자라거나 딱 맞게 맞춰서 썼던 것 같다. 네 개의 문항은 모두 구체적인 스펙을 묻기 보다는 AI 분야를 향해 지원자가 가지고 있는 관심과 태도를 묻는 내용이었다. 그래서 다른 자소서를 쓸 때와는 다르게 부스트캠프 자기소개서는 결과론적인 내용보다는 '나'라는 사람과 AI를 연결해서 설명하는 데 집..

Naver Boostcamp 2023.03.03