일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- DP
- 조합론
- 가끔은 말로
- 백트래킹
- dfs
- 다익스트라
- lazy propagation
- object detection
- 회고록
- dropout
- 우선 순위 큐
- c++
- Overfitting
- back propagation
- 미래는_현재와_과거로
- BFS
- 알고리즘
- 자바스크립트
- 세그먼트 트리
- pytorch
- tensorflow
- 가끔은_말로
- 크루스칼
- 이분 탐색
- 너비 우선 탐색
- 문자열
- 분할 정복
- 플로이드 와샬
- NEXT
- 2023
- Today
- Total
목록전체 글 (564)
Doby's Lab

🤔 Problem일반적으로 AI 프로젝트를 시작하기 위한 세팅을 고려할 때, 그 요소들 중 하나인 가상 환경을 고려하게 됩니다.왜냐하면, 로컬에 설치되어 있는 어느 패키지가 프로젝트마다 요구하는 버전이 다르기 때문에 이러한 충돌을 방지하기 위한 목적으로 가상 환경을 필요로 합니다. 그래서, 얼마 전까지는 conda를 활용한 가상 환경으로 프로젝트를 구성하고 만들어 왔지만, 의도치 않은 문제들이 발생하고 이를 완전히 해결하는 것은 다른 방식의 가상 환경을 고려해야 해결할 수 있겠다는 생각이 들었습니다. 우선, conda를 사용했을 때 오히려 패키지 관리에 의문이 들었습니다. 환경을 새로 파서 작업을 하고 있다 보면, '이건 다운로드한 적이 없는데 왜 실행이 되고 있지?'와 같은 이상한 현상이 나타났었습니..
🤔 Problem오늘 포스팅은 어떤 문제점을 겪었다기보다는 새로운 것을 발견한 것에서 시작한 포스팅입니다. 많이 접한 문법이지만, 이것이 무엇인지 어떻게 활용할 수 있는지를 다루어보려 합니다. 오픈소스를 보면, 이런 코드들을 많이 보게 됩니다.class Model(nn.Module): r""" param(1): ~~~할 때, ~~~로 지정 param(2): ~~~할 때, ~~~로 지정 """ def __init__(self, param1, param2): super().__init__() 처음 파이썬을 공부할 때는 따옴표를 3번 쓰는 것이 여러 줄 주석이라는 개념으로 알고 있었지만, 시간이 지나서 다시 저걸 찾아봤을 때는 docstring이라 불리고 있었고, 문자..

🤔 Problem오늘 다루어볼 문제는 어찌 보면 예전부터 궁금했으나 그에 대한 답을 감각적으로만 알고 있었고, 문제점으로 다루었을 때 어려울 것이라 예상했었기에 조금 미루어왔던 주제입니다. 오늘의 문제를 정의하기 전에 이것부터 얘기해 봅시다. 우리는 일반적으로 모델을 학습시킬 때, 배치 단위로 학습을 시킵니다. 그러면 예를 들어서 Input Tensor가 (4, 2)의 shape을 가진다고 했을 때, Batch Size가 16이라 해봅시다. 실제로 모델에 들어가게 되는 Input Tensor의 shape은 (16, 4, 2)가 될 것입니다. 이때, 모델의 Weight가 Batch Size에 따라서 똑같이 (16, weight shape)로 변하나요? 아닙니다. 그대로 (weight shape)을 유지하..
🤔 Problem문득 예전에 ViT를 구현해 놓은 코드를 보다가 그런 생각을 했습니다. '내가 저기서 nn.Parameter()를 왜 썼더라?' 지금 생각해 보면, 그냥 tensor를 써도 똑같은 코드일 텐데 말입니다. 이때 당시에 Attention을 구현하면서 Query, Key, Value를 만들어내기 위한 목적으로 Weight Matrix가 필요했었고, 여러 오픈 소스를 참고하면서 구현하다가 무심하게 썼었던 기억이 납니다.class ScaledDotProductAttention(nn.Module): def __init__(self, embedding_length, qkv_vec_length): ''' embedding_length : embedding 하나의 길이 -..
🤔 Problem파이토치 내에 클래스 내에 궁금한 메서드가 있어서 소스 코드를 보다가 문득 이런 문법을 보게 됩니다.def func(self, var1, var2): ... ... return self제가 임의로 만들어본 메서드입니다. 저기서 self를 리턴하고 있는데 '왜 self를 리턴하고 있는 것인가?'가 궁금했습니다.그래서 이번 포스팅에서는 이 것에 대해서 이야기해 봅니다. self가 의미하는 바가 인스턴스 본인을 참조하고 있다는 것은 이제는 너무나 명확하고, 당연한 관습입니다.헷갈리실 수 있겠지만, 문법이 아니라 관습입니다. self가 아닌 다른 걸로 해도 작동합니다. 거의 문법처럼 써서 그렇습니다. 아래의 코드도 정상적으로 작동하거든요 :)(물론, 현실에서 저러면 많은 욕을 ..

🤔 Problem이번에 ResNet을 PyTorch로 직접 구현해 보면서 약간의 의구심(?)이 들었던 부분이 있습니다. Residual Connection을 구현할 때 크게 2가지 방법으로 구현을 하는데, '두 코드 모두 Residual Connection을 수행하는가?'가 의문이자 이번 포스팅에서 알아내고 싶은 문제점입니다. + 코드에 대해서만 다룰 것이니 Residual Connection에 대한 개념의 언급은 따로 없습니다. 첫 번째 코드는 torchvision 라이브러리 내에 ResNet을 구현해 둔 소스코드입니다.해당 코드에서는 identity = x와 같은 방법으로 복사를 합니다.( https://github.com/pytorch/vision/blob/main/torchvision/model..

✅ Intro오랜만에 블로그 글을 적는 거 같습니다. 이 프로젝트가 끝난 건 거의 한 달이 다 되어가지만, 지금도 하고 있는 프로젝트가 있고, 중간고사도 얼마 남지 않았습니다. 그래서, 이번 프로젝트를 통해 겪었던 경험들과 떠오른 생각들이 잊힐 수도 있을 거 같아 시간을 내어 적어보고자 합니다. 또한, 앞으로의 프로젝트를 블로그에 적는 것에 대해서는 방향을 바꿔야 한다고 생각했습니다. 지금까지는 프로젝트의 내용들을 전부 시작부터 끝까지 적어왔습니다. 하지만, 앞으로 제가 할 프로젝트들은 깃허브나 논문으로 다 아카이브가 될 것이기 때문에 다시 한번 블로그에 처음부터 끝까지 적는 건 부담스럽기 때문입니다. 결론적으로, 이런 유형의 프로젝트 관련 글들에는 깃허브나 논문의 링크를 걸어서 순수한 회고의 특성을 가..

✅ Intro 기존 Layer Normalization을 통해서 internal covariate shift 현상(레이어를 통과함에 따라 데이터의 분포가 달라지는 현상)을 해결하며, 이를 통해 심층 신경망 구조의 네트워크는 학습을 더 안정화시키고, 최적의 loss까지 빠르게 수렴하도록 도와줍니다. 하지만, Layer Normalization은 computational overhead(연산 자원)을 많이 필요로 하며, 결과적으로 이것은 학습의 속도를 낮추게 됩니다. 이러한 문제점에 기반하여 'Root Mean Square Layer Normalization'이라는 논문에서는 RMS Normalization을 제안합니다. 개념에 대해서는 아래에서 다루지만, 이 연구의 결과는 학습의 속도적인 문제점을 해결하는..