티스토리

Doby's Lab
검색하기

블로그 홈

Doby's Lab

draw-code-boy.tistory.com/m

Medical AI Engineering Student

구독자
10
방명록 방문하기
공지 카테고리 관련 알림 모두보기

주요 글 목록

  • 글쓰기의 문제는 정보 부족, 연결성, 표현력 부족 이전 글에서 앞으로 글을 좀 자주 써야겠다는 마음을 먹은 후로, 잠시 다른 생각을 하는 틈이 생기면 어떤 주제로 글을 적어볼 건지 생각했었다. 괜히 주위를 두리번거리며 쓸 만한 요소가 없는가를 찾기도, 영화라도 한 편 보면서 감상문을 써볼까 싶기도 했지만 억지스러운 거 같아 마음을 접어두었다. 하지만, 한 주를 돌이켜보니 쓸 만한 것이 바로 보였다. 또 글쓰기에 관한 것인데, 최근 졸업 작품을 마무리하는 단계에 접어들면서 이런 일이 있었다. 졸업 작품 지도 교수님께서 프로젝트의 내용이 많다 보니 전반적인 스토리를 정리해서 다음 미팅 때 풀어보는 게 좋을 거 같다는 코멘트를 주셨고, 그에 따라 지난 한 주 간 프로젝트의 전체 내용을 문서화하는 작업을 먼저 수행했다. 한 문장을 쓰기도 되게 어려웠다. 논문을.. 공감수 0 댓글수 0 2025. 3. 26.
  • 여전히 글을 쓰는 것은 어렵다 여전히 글을 쓰는 것은 어렵다. 종종 ‘글을 잘 쓰고 싶다’는 생각과 글을 써야 하는 순간들을 돌이켜보면, 모니터에 하얀 화면을 띄워 두고 몇 시간 동안 머리를 쥐어 싸맸던 기억들이 있다. 그렇다고 해서 들인 고뇌만큼 썼던 글들은 좋은 글이 아니었다. 대부분은 써야 할 시간이 얼마 남지도 않았을 때, 급하게 썼던 글이었다. 우선, 부담이 크다. 더 나은 표현이 있을 거 같고, 다소 투박한 표현들처럼 느껴지는 문장들이 타이핑하는 내 손가락을 멈추고, 썼던 글을 처음부터 끝까지 여러 번 반복해서 읽게 만든다. 이 반복이 나를 너무 피곤하게 만든다. 그러다 보면, 글의 정체성이 늘 모호해졌다. 왜 쓰고 있었지에 대한 의문이 들면서 그만 쓰고 싶었다. 지금은 인공지능의 시대, 쓰고 있던 글을 Chat GPT에게.. 공감수 0 댓글수 0 2025. 3. 22.
  • self.register_buffer(), 학습하지 않을 파라미터라면? (tensor와 명백하게 다른 점 2) 🤔 Problem오랜만에 PyTorch 관련 글입니다. 최근에는 Generative Model 쪽을 공부하면서 DDPM을 구현하다가 PyTorch의 새로운 기능을 발견했는데요. 바로 오늘 글의 주제가 되는 self.register_buffer()입니다. 본 포스트는 예전에 작성한 포스트들 중에 'nn.Parameter(), 이걸 써야 하는 이유가 뭘까? (tensor와 명백하게 다른 점)'라는 포스트의 후속 편이 되기도 합니다.  이전 포스트의 내용을 간략하게 리뷰해 보면 '모델 내에서 단순히 torch.tensor()를 통해 선언한 텐서는 학습의 대상이 되지 못하고, 이를 명확하게 모델 내 학습을 하는 파라미터로 정의하기 위해서는 nn.Parameter()로 감싸서 추가적으로 선언해야 한다.'라는 내.. 공감수 3 댓글수 0 2025. 1. 14.
  • 2024년 회고, 그럼에도 불구하고 한 해가 지났다. 벌써 블로그의 4번째 회고를 할 때가 되었다. 난 가끔 이 회고록을 적는 순간을 기다리면서, 회고록에 들어갈 내용들을 다른 곳에 적어두고는 했다. '이번 해는 이렇게 기억되었으면 좋겠다'는 마음들이 불쑥 튀어나올 때마다 그랬다. 그 모든 글들을 이곳에 기록하여 많은 기억들이 담긴 상태로 두고 싶다만, 그 모든 글들을 다시 가공하여 회고록에 남기기에는 부담이 크다. 회고록은 마음 편히 쓰고 싶다. 오로지 지금 현재의 시점에서 기억하는 2024년을 돌이켜보며, 이전에 끄적인 글들은 참고 정도만 하려고 한다.    2023년 회고록에서는 월별로 했었던 일들, 일어났던 일들을 정리해서 회고를 진행했었다. 이번에는 조금 틀을 무너뜨려서 올해 초반부터 기억하는 것들을 차례로 회고하고자 한다. 3번.. 공감수 3 댓글수 2 2025. 1. 1.
  • SRL-AE: ECG 데이터 이상치 탐지에 강인한 오토인코더 알고리즘 ✅ Intro오랜만에 글을 적습니다. 종강한 지 둘째 날에서 셋째 날로 넘어가는 밤에 글을 적고 있네요. 이번에도 새로운 연구를 해보았답니다. 항상 연구가 끝나면 아쉬움들이 남습니다. 이번 연구도 그렇고요. 하지만, 개인적인 목적을 달성함에 있어서는 많은 걸 느끼고 만족했던 연구였습니다. 그래서, 모든 프로젝트의 끝은 회고라고 생각하기에 이번에도 회고를 준비해 봤습니다.  이번에 진행한 프로젝트는 지금껏 해왔던 연구들과 다소 결이 다르답니다. 의도치 않게(?) 과거의 프로젝트들은 전부 Computer Vision에서 다루는 Task가 전부였습니다. Classification, Semantic Segmentation, Object Detection... 여기까지만 보면 저는 Computer Vision 하.. 공감수 1 댓글수 2 2024. 12. 22.
  • GPU 없이 Colab(코랩)으로 AI를 하고 있는 당신에게 전하는 3가지 팁 ✅ Introduction많은 사람들이 AI를 공부하면서 모델을 학습시킬 수 있는 능력들을 갖추었지만, 개인 GPU를 보유하고 있는 경우는 많이 없습니다. 이에 대한 해결책으로 Google의 Colab을 많이 사용합니다. 하지만, Colab 자체가 본질적으로는 가상 머신이다 보니 개인 컴퓨터에 GPU가 있는 환경과 다른 부분들이 있습니다. 다시 말해서, 모델 학습을 시키는 작업을 할 때, 추가적인 작업들을 필요로 합니다. 그래서, 이러한 추가적인 작업들에 대해 지난 경험들을 바탕으로 얻은 팁들을 다루어보고자 합니다. 정리하고자 하는 팁들은 새로운 작업들을 뜻하는 것은 아니고, 기존 작업들을 더 효율적으로 처리할 수 있는 방법들입니다. GPU를 갖고 있는 일반적인 환경이라면 작업을 수행하는 소스 코드, 데.. 공감수 2 댓글수 4 2024. 10. 25.
  • 정의할 수 없던 문제 날이 갈수록 내가 외로움을 많이 느끼는 게 스스로 보였다. 작년에 나는 이렇게까지 외로움을 느끼지 않았었다. 왜 외로움을 느낄까. 물리적으로 보이는 건 혼자 있는 시간들이 더 많아졌다. 그리고, 공부하고 있는 분야들이 조금 더 지엽적인 분야가 되면서 얘기를 나눌 수 있는 사람들이 점점 줄어든다. 그런데, ‘내가 원래 이런 상황에서 외로움을 느끼는 사람이었나’라는 의문이 든다. 왜냐하면, 작년에 비해서 이런 시간들의 농도가 조금 더 짙어진 것일 뿐, 늘 이렇게 살아왔지 않았던가. 그러면, 문제를 다시 정의해 볼 수 있다. 늘 같은 시간들을 보내왔는데 외로움을 느끼는 이유가 무엇일까. 이 단어가 떠오르기까지 많은 경우들을 생각해 봤다. 그런데, 좀처럼 떠오르지 않다가 문득 학부연구생 첫 미팅 때가 스쳐 지나.. 공감수 9 댓글수 4 2024. 9. 6.
  • scheduler.get_last_lr(), 이제는 Learning Rate를 이렇게 확인하더랍니다 🤔 Problem모델을 학습하다가 이상하게 스케줄러에 대한 출력(Learning Rate에 대한 변경 출력)이 없어서 이에 대해 verbose를 True로 바꿔주려고 작업할 내용을 확인하기 위해 공식 문서를 들어가 봤다가 아래 내용을 확인했습니다.😀 Solution이제는 스케줄러에 대해서 verbose argument를 지원하지 않겠다는 내용이었습니다. 하지만, 스케줄러에 대한 메서드 get_last_lr()을 사용해 보라고 합니다. 이 메서드는 스케줄러가 마지막으로 계산한 Learning Rate를 출력하며, 이는 '현재 에포크에서 어떠한 Learning Rate로 학습을 진행하게 되는가'를 의미합니다. 그래서, 아래 내용으로 잘 확인이 되는지를 실험하기 위해 간단한 코드를 만들어줬습니다. 매 에포.. 공감수 1 댓글수 0 2024. 7. 28.
  • pyvenv.cfg, venv에서는 파이썬을 이렇게 실행하더랍니다 🤔 Problem몇 달 전부터 아나콘다에서 독립적인 작업 세팅을 추구하고 있어서, 시간이 날 때마다 세팅을 바꿔가는 과정을 겪고 있었습니다. 그리고, 이제야 완전히 독립된 작업 세팅이 만들어진 거 같아 아나콘다를 삭제하고, 그와 관련된 마지막 이슈를 정리하고자 합니다. 우선, venv를 통해서 가상 환경을 만들어 작업을 해오던 입장이었는데 아나콘다(아나콘다 내부의 파이썬 포함)를 완전히 삭제하고, 파이썬을 재설치해서 환경 변수까지 다시 세팅을 해주었지만, 삭제 이전의 가상 환경들은 모두 이전 아나콘다의 파이썬을 찾는 게 문제점이었습니다. (파이썬 파일을 실행시키면, 아래와 같은 오류가 발생합니다.)python test.py>>> No Python at '"C:\Users\user\anaconda3\py.. 공감수 0 댓글수 0 2024. 7. 28.
  • DataLoader의 collate_fn, 서로 다른 샘플의 크기를 하나의 배치로 묶는 방법 🤔 Problem작업을 하다가 DataLoader를 선언하는 코드 부분에서 처음 보는 Argument가 있었습니다. 이 Argument에 대해서 공부를 하면서 '이건 언젠가 유용하게 쓰일 기능이다!'라고 판단이 들어 글을 기록하게 되었습니다. 우리는 대부분 모델에 학습을 시킬 때, 각 샘플의 shape이 거의 다 같도록 전처리를 해서 학습을 시키기 때문에 사실 이 기능이 흔하게 쓰이지는 않을 것입니다. 하지만, 특수한 경우에는 각 데이터 샘플의 shape이 똑같이 처리될 수 없는 경우들이 있습니다. 예를 들어, Object Detection에 관한 프로젝트를 한다고 가정하면, 각 이미지에 대해 Bounding Box의 수가 모두 같나요? 거의 대부분 그렇지는 않습니다. 이러한 상황에 대해서 하나의 데이.. 공감수 0 댓글수 0 2024. 7. 26.
  • 파이썬에서 inf 값을 나타내는 법 😀 Solution파이썬에서는 무한대 값을 아래와 같이 간단하게 나타낼 수 있습니다.inf_value = float('inf')minus_inf_value = float('-inf')문자열로 들어가는 'inf'가 'Inf'가 되든, 'INF'가 되든 상관없습니다.다만, float 타입이 아닌 int라면 아래와 같은 오류가 발생하니 유의해야 합니다.ValueError: invalid literal for int() with base 10: 'inf' 공감수 0 댓글수 0 2024. 7. 23.
  • torch.where(), 근데 이제 loss를 만들 때 많이 곁들인 🤔 ProblemPyTorch에서 자주 쓰는 메서드들은 어느 정도 체득하면서 빠르게 핸들링할 수 있도록 하는 것이 좋은 거 같습니다. 이번 글은 그러한 메서드들 중에 자주 쓰이는 torch.where()에 대해서 정리해 보았습니다. 사실은 매우 간단합니다만, 완전히 체득을 해두는 게 앞으로 작업에 편할 거 같아서 일부러 글을 씁니다.out = torch.where(condition, input, other)condition은 BoolTensor입니다. True와 False만을 담고 있으며, True인 element 자리에 input이 들어가고, False인 element 자리에 other이 들어가게 됩니다.1. condition은 Boolean Masking으로 나타내기보통 condition은 원래의 .. 공감수 0 댓글수 0 2024. 7. 23.
  • pip install -e의 의미, 아직도 패키지 그렇게 편집하세요? 🤔 Problem본 포스팅에 들어가기 전, 유의사항을 알려드립니다. 이번 포스팅의 내용은 원격 저장소와는 아무런 관련이 없습니다. 조금 헷갈릴 수 있기 때문에 미리 적어둡니다. 이 글에서 말하는 패키지(라이브러리)는 '깃에서 클론한 레포지토리', '자체 개발 패키지' 등 로컬 상에 존재하는 패키지(폴더)를 의미합니다. '깃의 원격 저장소', 'PyPI'와 같은 원격저장소에 위치한 (아직 로컬에 설치하지 않은) 패키지와는 거리가 먼 내용입니다. 오픈소스를 핸들링하다 보면, 레포지토리를 clone하고, 해당 레포지토리로 이동하여 requirements.txt에 따라 설치하면서 아래와 같은 명령어를 자주 볼 수 있었습니다.pip install -e .option을 확인해 보면, '해당 경로에 위치한 패키지(.. 공감수 0 댓글수 4 2024. 7. 22.
  • 답을 쫓아 왔는데 질문을 두고 온 거야 오랜만에 글을 쓴다. 아직 한 해 회고록을 쓰기에는 절반밖에 지나지 않은 한 해지만, 일기도 안 쓰는 나의 지난날들을 기록해 두기에 한 해는 너무 길어서 쓰게 되었다. 저번 주에 종강을 하고 나서 난 체력적으로든, 정신적으로든 많이 지쳐있었던 거 같다. 종강을 하고 나서도 과제, 계절학기 등 종강이라 말할 수 없는 시간들을 보내고 있다. 시간이 지날수록 난 무언가를 얻기보다는 상실하며 살아가고 있는 듯한 기분을 느낀다. 솔직하게 말하면 많은 외로움을 느끼며 살고 있다. 어쩌면 내가 이 외로움들을 초래한 것인지도 모르겠다. 개인의 생각들이 농도가 짙어짐에 따라 다른 방향, 다른 활동들을 볼 수 있다. 정말 이게 한 과에서 이렇게 다양할 수가 있을까 싶을 정도로 그렇다. 그럼에도 불구하고, 그들 몇몇에게는 .. 공감수 3 댓글수 3 2024. 6. 30.
  • 왜 U-Net의 Output에서는 ReLU가 아니라 Sigmoid를 쓸까? 🤔 Problem세션을 진행하던 중 논문 리뷰에 대해 피드백을 진행하다가 질문을 받았다. '모델 내에서는 ReLU를 쓰는데 왜 마지막에서는 갑자기 Sigmoid'를 쓰나요?', 솔직하게 당황했다.결론적으로, 간단히 말하면 이 질문에 대한 답은 확률로 간단하게 표현하기 위함이라 정리할 수 있다. 이에 대해서 'ReLU에 비해 상대적으로 Sigmoid의 Output이 기준 값 0.5에 의하여 0과 1로 판별하기 쉽다.(?)'라고 답한 거 같다. 사실 정확하게 기억이 안 난다. 암튼 틀린 답이었다. Sigmoid의 출력을 0 혹은 1로 가진다고 했었나? 그랬다면, 왜 그런 말을 했을까... 그리고, 나 스스로도 답이 시원찮아서 '모델 내에서 Sigmoid를 쓰지 않는 이유'라는 반대의 경우에서도 설명했다. .. 공감수 1 댓글수 1 2024. 5. 17.
  • DropPath란 무엇이며, Dropout과 무슨 차이가 있을까? (timm 활용 및 오픈소스 분석) 🤔 Problem비전 모델 오픈소스를 보다 보면, 종종 DropPath라는 클래스로부터 인스턴스를 생성하여 모델에서 사용하는 경우를 자주 봅니다. 또한, 이 DropPath를 사용하기 위해서는 timm이라는 라이브러리를 사용합니다. 그래서, 오늘은 DropPath가 무엇이며, timm이라는 라이브러리는 무엇인지 그 내부에 어떻게 구현되어 있는지를 기록해두려고 합니다.😀 DropPath란?(= Stochastic Depth)DropPath란 Dropout의 이름과 유사하게 기능도 유사한 역할을 수행합니다.이 개념은 Deep Networks with Stochastic Depth에서 등장한 개념으로 Residual connection의 구조를 가진 모델에서 사용할 수 있는 기능입니다. 논문에서는 이를 S.. 공감수 0 댓글수 0 2024. 5. 12.
  • 아나콘다 말고 다른 가상 환경은 없을까? (venv) 🤔 Problem일반적으로 AI 프로젝트를 시작하기 위한 세팅을 고려할 때, 그 요소들 중 하나인 가상 환경을 고려하게 됩니다.왜냐하면, 로컬에 설치되어 있는 어느 패키지가 프로젝트마다 요구하는 버전이 다르기 때문에 이러한 충돌을 방지하기 위한 목적으로 가상 환경을 필요로 합니다. 그래서, 얼마 전까지는 conda를 활용한 가상 환경으로 프로젝트를 구성하고 만들어 왔지만, 의도치 않은 문제들이 발생하고 이를 완전히 해결하는 것은 다른 방식의 가상 환경을 고려해야 해결할 수 있겠다는 생각이 들었습니다. 우선, conda를 사용했을 때 오히려 패키지 관리에 의문이 들었습니다. 환경을 새로 파서 작업을 하고 있다 보면, '이건 다운로드한 적이 없는데 왜 실행이 되고 있지?'와 같은 이상한 현상이 나타났었습니.. 공감수 2 댓글수 1 2024. 5. 11.
  • 문자열을 더 다양하게 사용할 수는 없을까? (Raw String, docstring, 문서화) 🤔 Problem오늘 포스팅은 어떤 문제점을 겪었다기보다는 새로운 것을 발견한 것에서 시작한 포스팅입니다. 많이 접한 문법이지만, 이것이 무엇인지 어떻게 활용할 수 있는지를 다루어보려 합니다. 오픈소스를 보면, 이런 코드들을 많이 보게 됩니다.class Model(nn.Module): r""" param(1): ~~~할 때, ~~~로 지정 param(2): ~~~할 때, ~~~로 지정 """ def __init__(self, param1, param2): super().__init__() 처음 파이썬을 공부할 때는 따옴표를 3번 쓰는 것이 여러 줄 주석이라는 개념으로 알고 있었지만, 시간이 지나서 다시 저걸 찾아봤을 때는 docstring이라 불리고 있었고, 문자.. 공감수 0 댓글수 0 2024. 5. 4.
  • Tensor는 서로 다른 ndim에 대해서 어떻게 연산할까? (Broadcasting Semantics) 🤔 Problem오늘 다루어볼 문제는 어찌 보면 예전부터 궁금했으나 그에 대한 답을 감각적으로만 알고 있었고, 문제점으로 다루었을 때 어려울 것이라 예상했었기에 조금 미루어왔던 주제입니다. 오늘의 문제를 정의하기 전에 이것부터 얘기해 봅시다. 우리는 일반적으로 모델을 학습시킬 때, 배치 단위로 학습을 시킵니다. 그러면 예를 들어서 Input Tensor가 (4, 2)의 shape을 가진다고 했을 때, Batch Size가 16이라 해봅시다. 실제로 모델에 들어가게 되는 Input Tensor의 shape은 (16, 4, 2)가 될 것입니다. 이때, 모델의 Weight가 Batch Size에 따라서 똑같이 (16, weight shape)로 변하나요? 아닙니다. 그대로 (weight shape)을 유지하.. 공감수 0 댓글수 0 2024. 5. 4.
  • nn.Parameter(), 이걸 써야 하는 이유가 뭘까? (tensor와 명백하게 다른 점) 🤔 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 하나의 길이 -.. 공감수 4 댓글수 3 2024. 4. 29.
  • return self, 나를 왜 리턴 해야 할까? (Method Cascading) 🤔 Problem파이토치 내에 클래스 내에 궁금한 메서드가 있어서 소스 코드를 보다가 문득 이런 문법을 보게 됩니다.def func(self, var1, var2): ... ... return self제가 임의로 만들어본 메서드입니다. 저기서 self를 리턴하고 있는데 '왜 self를 리턴하고 있는 것인가?'가 궁금했습니다.그래서 이번 포스팅에서는 이 것에 대해서 이야기해 봅니다. self가 의미하는 바가 인스턴스 본인을 참조하고 있다는 것은 이제는 너무나 명확하고, 당연한 관습입니다.헷갈리실 수 있겠지만, 문법이 아니라 관습입니다. self가 아닌 다른 걸로 해도 작동합니다. 거의 문법처럼 써서 그렇습니다. 아래의 코드도 정상적으로 작동하거든요 :)(물론, 현실에서 저러면 많은 욕을 .. 공감수 0 댓글수 0 2024. 4. 27.
  • x.clone()은 정말 Residual Connection을 할까? (Memory 공유, Immutability) 🤔 Problem이번에 ResNet을 PyTorch로 직접 구현해 보면서 약간의 의구심(?)이 들었던 부분이 있습니다. Residual Connection을 구현할 때 크게 2가지 방법으로 구현을 하는데, '두 코드 모두 Residual Connection을 수행하는가?'가 의문이자 이번 포스팅에서 알아내고 싶은 문제점입니다. + 코드에 대해서만 다룰 것이니 Residual Connection에 대한 개념의 언급은 따로 없습니다. 첫 번째 코드는 torchvision 라이브러리 내에 ResNet을 구현해 둔 소스코드입니다.해당 코드에서는 identity = x와 같은 방법으로 복사를 합니다.( https://github.com/pytorch/vision/blob/main/torchvision/model.. 공감수 0 댓글수 0 2024. 4. 27.
  • U-Net 기반 아키텍처를 활용한 울혈성 심부전 환자 폐부종 진단 방법론 연구 ✅ Intro오랜만에 블로그 글을 적는 거 같습니다. 이 프로젝트가 끝난 건 거의 한 달이 다 되어가지만, 지금도 하고 있는 프로젝트가 있고, 중간고사도 얼마 남지 않았습니다. 그래서, 이번 프로젝트를 통해 겪었던 경험들과 떠오른 생각들이 잊힐 수도 있을 거 같아 시간을 내어 적어보고자 합니다. 또한, 앞으로의 프로젝트를 블로그에 적는 것에 대해서는 방향을 바꿔야 한다고 생각했습니다. 지금까지는 프로젝트의 내용들을 전부 시작부터 끝까지 적어왔습니다. 하지만, 앞으로 제가 할 프로젝트들은 깃허브나 논문으로 다 아카이브가 될 것이기 때문에 다시 한번 블로그에 처음부터 끝까지 적는 건 부담스럽기 때문입니다. 결론적으로, 이런 유형의 프로젝트 관련 글들에는 깃허브나 논문의 링크를 걸어서 순수한 회고의 특성을 가.. 공감수 3 댓글수 3 2024. 4. 7.
  • RMS Normalization, ICS의 해결책은 re-scaling에 있다. ✅ Intro 기존 Layer Normalization을 통해서 internal covariate shift 현상(레이어를 통과함에 따라 데이터의 분포가 달라지는 현상)을 해결하며, 이를 통해 심층 신경망 구조의 네트워크는 학습을 더 안정화시키고, 최적의 loss까지 빠르게 수렴하도록 도와줍니다. 하지만, Layer Normalization은 computational overhead(연산 자원)을 많이 필요로 하며, 결과적으로 이것은 학습의 속도를 낮추게 됩니다. 이러한 문제점에 기반하여 'Root Mean Square Layer Normalization'이라는 논문에서는 RMS Normalization을 제안합니다. 개념에 대해서는 아래에서 다루지만, 이 연구의 결과는 학습의 속도적인 문제점을 해결하는.. 공감수 2 댓글수 0 2024. 3. 13.
  • 2023년 회고, 만들어라 ✅ Intro 2월 말에 가까워지면서 개강일도 서서히 가까워지고 있다. 이렇게 회고록이 늦게까지 미뤄질 거라 예상은 못 했다. 개강을 하기 전에는 써두어야 2023년에 대한 기록들이 그 당시의 뉘앙스를 살릴 수 있을 거 같기에 한 해가 끝나고, 2개월이 지나 늦겨울을 맞이하고서야 쓰게 되었다. 그리고, 회고록만큼은 더 잘 기록하기 위해서는 편한 어투로 쓰는 게 맞는 거 같다. 사실 초안을 종강 직후에 쓰고 있었는데 그때는 다소 형식적으로 쓴 느낌이 있었고, 2023년이라는 한 해에 대해서 다소 비관적인 마음으로 쓰고 있었다. 연초 일정들이 시작되고, 바쁜 나날들을 보내고서 끝맺음을 확실하게 해 둘 수 있는 시간이 되었다. 연초 일정들에 대해서는 아직 안 끝난 부분도 있고, 단순히 2023년에 대해서만 기.. 공감수 7 댓글수 5 2024. 2. 25.
  • Wordpiece Tokenizer, ['자연어', '를', '토큰', '으로', '만드는', '방법'] ✅ Intro 이번 프로젝트의 중심은 LLM이다 보니 CLIP, 데이터 처리 등 다루어야 할 요소들이 많지만, 가장 근본적으로 공부해야 할 부분은 NLP(자연어 처리)입니다. NLP 관련 모델을 더 깊게 공부하기 앞서 '자연어를 어떻게 모델에 넣지?'라는 질문에 대해서 답을 찾아보았습니다. ✅ Tokenization 단편적으로, 자연어를 모델에 학습시킨다고 생각했을 때, 문장 자체를 넣어버리면 좋겠지만 세상에는 엄청나게 많은 조합들의 단어가 있고, 그 단어들의 조합으로 셀 수도 없는 문장을 만들어낼 수가 있습니다. 각 문장에 대해 숫자를 부여한다면 엄청나게 많은 숫자들로 구성이 되겠지만, 이건 관리 차원에서도 어렵고, 데이터가 숫자 하나로 정리되기에는 너무 간결하여 Representation이 떨어집니다.. 공감수 2 댓글수 0 2024. 2. 21.
  • CLIP, 단순한 분류의 시대는 지났다 ✅ Intro LLaVA-Med를 공부하면서 Visual Encoder로 CLIP(Contrastive Language-Image Pre-training)이 사용되어 이번 기회에 공부를 해보았습니다. CLIP은 기존 Classification 방식에서 새로운 메커니즘을 제안했습니다. Classification은 수많은 데이터셋에서 라벨링 된 클래스로 분류하는 것이 일반적인 특징입니다. 하지만, 세상에는 여러 가지 사물이 존재하며, 이 사물 또한 어떠한 상태에 있냐에 따라 분류를 할 수 있는 범위는 셀 수 없을 정도로 많습니다. 예를 들어, '일반적인 자전거'와 '바퀴가 없는 자전거'라는 Task로 수많은 사물들이 더 디테일한 description을 원할 때, 단순한 Classification Task만으.. 공감수 3 댓글수 0 2024. 2. 14.
  • DropBlock, 당신은 최근 Vision 모델에서 Dropout을 본 적이 있는가 ✅ Intro Computer Vision 관련 아키텍처가 발전함에 따라 Overfitting을 막기 위해 Batch Normalization, 혹은 Layer Normalization을 사용하는 추세입니다. 하지만, 이전에는 Dropout이 있었죠. Dropout은 어느샌가부터 마지막 fully-connected layer를 제외하고는 Computer Vision에서 잊혀 갔습니다. 이러한 이유에는 기존 Dropout은 Feature Map의 공간적인 특성을 고려하지 않는 부분에 있습니다. 픽셀 별로 랜덤 하게 Drop 시키는 경우를 생각해 보면 이해가 됩니다. Feature Map에서 고작 한 픽셀을 Drop 시킨다는 건 의미가 없을 수 있습니다. 하지만, 그림(c)과 같이 Feature Map의 특.. 공감수 3 댓글수 2 2024. 2. 8.
  • Attention에 대해 Attention! ✅ Introduction ViT라는 아키텍처를 공부하다가 새로운 메커니즘을 접하게 되었습니다. 그 새로운 메커니즘은 이번 글의 주제인 Attention입니다. 아직 NLP 분야의 Task를 다루어본 경험이 없기 때문에 등장하게 된 정확한 배경은 잘 모르지만, '어떠한 작동 원리인가?', '왜 성능이 더 좋은가?', '수식이 의미는 무엇인가?'에 대해서 집중적으로 다루어 보고자 합니다. 기존 자연어처리 분야에서는 Recurrence mechanism, 비전 분야에서는 Convolutional mechanism으로 엄청난 연구 및 아키텍처들이 나온 만큼 이미 각 분야에서 각 mechanism이 탄탄한 베이스가 되어있었습니다. 하지만, '세상에 완벽한 시스템은 없다'라는 말과 같이 훌륭한 연구와 고질적인 문.. 공감수 1 댓글수 5 2023. 12. 26.
  • Git main branch에 올릴 때 참고 링크 모음 git push https://soda-dev.tistory.com/12 [GitHub] 깃허브에 프로젝트 올리기 보통은 저장소를 생성한뒤 'Upload files'를 하면 업로드되지만 파일 갯수가 너무 많을 경우 안되므로 큰 프로젝트를 업로드할때는 이 방법으로 하자 1. Git을 설치한다. https://git-scm.com/downloads Git - Do soda-dev.tistory.com 원격 저장소 주소 찾기 https://estar.tistory.com/56 github 저장소 주소 찾기 생활코딩 동영상을 보고있는 와중에 이미 만든 저장소의 주소는 도대체 어디서 볼수있는건지,,몰라서 한참 헤맸는데 그냥 버튼 하나만 누르면 됐지ㅏ더리나ㅓㄷ ㄹ나ㅓㅜㅜㅜㅜㅜㅜㅜ(멘붕) estar.tistory.c.. 공감수 0 댓글수 0 2023. 12. 25.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.