본문 바로가기

블로그/딥러닝

문장 벡터 요약 방법: Multi-Head Pooling 딥러닝 모델에서 문장이나 문서 전체를 하나의 벡터로 표현하는 과정은 매우 중요하다. 일반적으로는 [CLS] 토큰이나 평균 풀링(average pooling), 최대값 풀링(max pooling) 등을 사용하지만, 이 방식들은 각 단어의 중요도를 고려하지 못한다는 한계가 있다. 즉, 모든 토큰을 동일하게 취급한다는 점이다. 하지만 실제 문장의므는 특정 단어의 기여도가 훨씬 클 수도 있다. 참고: E5 모델은 문장 단위의 의미를 얻기 위해 평균 풀링을 수행함def average_pool(last_hidden_states: Tensor, attention_mask: Tensor) -> Tensor: last_hidden = last_hidden_states.masked_f.. 더보기
[Faiss GPU 병렬 처리 오류] Faiss assertion 'p + size == head_' failed in void faiss::gpu::StackDeviceMemory::Stack::returnAlloc(char*, size_t, cudaStream_t) at /project/faiss/faiss/gpu/utils/StackDeviceMemory.cpp:144 상황: Faiss GPU를 활용해 텍스트 유사도 검색하는 부분이 있었는데, 이를 ThreadPoolExcutor를 활용하여 병렬 처리 구성하였을 경우 발생한 오류 Faiss assertion 'p + size == head_' failed in void faiss::gpu::StackDeviceMemory::Stack::returnAlloc(char*, size_t, cudaStream_t) at /project/faiss/faiss/gpu/utils/StackDeviceMemory.cpp:144 Faiss GPU는 Faiss CPU와 다르게, 읽기 전용 함수에서도 thread safe 하지 않기 때문에 해당 오류가 발생한다. 이러한 점은 Faiss 공식 문서에서도 나와 있다. 해당 오류에 관한 이슈,h.. 더보기
[RAG] RAG 성능 향상을 위한 Re-ranking 대학원 시절 검색 모델에 흥미를 가져 관련 연구와 공부를 진행했었는데, 당시 배운 지식이 RAG 시스템을 이해하는 데 많은 도움이 되고 있다.  예를 들어, RAG에서 주로 활용되는 임베딩 방식은 쿼리와 문서가 독립적으로 인코딩되어 문장 간의 유사도를 계산하는 Bi-Encoder이다. All-to-all interaction이 필요한 Cross-Encoder와 비교했을 때, Bi-Encoder는 텍스트를 미리 인코딩할 수 있으며, ANN Search 방식을 활용하면 Cross-Encoder 대비 빠른 연산 속도를 보장한다. 따라서 Latency가 중요한 RAG 시스템에서 Bi-Encoder 구조를 활용하는 것은 타당해 보인다. 하지만 Bi-Encoder 방식은 문서를 독립적으로 임베딩하기 때문에 텍스트 .. 더보기
딥러닝의 과대적합(Overfitting)을 해결하자 Train 데이터셋에 대한 학습은 잘 되고 있지만, Validation loss가 감소하지 않고 증가하면 보통 우리는 Train 데이터셋에 과대적합 (오버피팅)이 일어났다고 할 수 있다. 왜 오버피팅이 문제가 되는가? 그것은 모든 ML 알고리즘의 목적은 일반화 성능에 있기 때문이다. 우리가 학습을 통해 배운 알고리즘은 학습 데이터에서만 잘 작동하면 문제가 될 것이다. 즉, 우리가 보지 못한 Unseen 데이터에 잘 작동해야 한다. 따라서, 일반화 성능을 높이기 위해서 우리는 오버피팅을 고려해야 한다. 딥러닝 아키텍쳐를 구성하기 시작하는 순간 오버피팅과의 싸움이 일어난다. 따라서, 다양한 기법을 통해 이를 해결하기 위해 노력해야한다. 그럼 과소적합과 과대적합은 무슨 차이일까? 과소 적합은 데이터를 제대로 .. 더보기
단층에서부터 Deep한 다층 퍼셉트론까지(Universal Approximation Theorem) 다양한 실험에 따르면 노드 수가 많은 단층 구조 신경망보다, 비선형 함수를 활용한 노드 수가 적은 다층 구조 신경망이 훨씬 우수한 경우가 많다고 한다. 그렇다면 왜 비선형 활성화 함수(e.g., ReLu)를 활용해야 하는가? 이 이야기를 하기 전에, 우리가 어떻게 매우 복잡한 문제를 딥러닝으로 해결할 수 있는지에 대한 단서인 Universal Approxiamtion Theorem을 알아보자. Universal Approxiamtion Theorem Every continuous function that maps intervals of real numbers to some output interval of real numbers can be approximated arbitrarily closely by.. 더보기
[이상치 탐지] 금형 센서 데이터 이상 탐지 사례 2019년 10월 11일 위세아이텍에서 주최한 '인공지능 개발전략과 산업별 사례'에서의 딥러닝 기반 금형 센서 데이터 이상 탐지 발표 사례를 정리한 글입니다. Rana, Annie lbrahim et al (2016)에 따르면 이상치 탐지 분석이 통계기반에서 기계학습기반으로 변하고 있으며, 기존 통계기법보다 향상된 성능을 보인다고 한다. 이상 탐지 이상 탐지는 시계열 데이터에서 보편적인 패턴에서 벗어나거나 벗어나려는 징후가 있는 패턴을 찾는 분석 - 뚜렷한 패턴을 보이지 않지만 이상을 일으킴 - 보편적인 것에 대비 상대적으로 수가 적음 - 지금은 문제가 없지만 앞으로 문제가 발생할 수 있는 패턴 기계학습을 이상 탐지에 적용할 때, 쉽게 생각하면 이진 분류 모델로 생각할 수 있는데 이진 분류로 판단하면 아.. 더보기
역전파 알고리즘(Back Propagation)과 Delta Rule(1) 딥러닝 아키텍처가 도대체 어떻게 데이터를 "학습"하고 그렇게 어려운 문제를 해결할 수 있는가?라고 했을 때, 그 핵심이 되는 알고리즘은 "역전파 알고리즘(Back Propagation)"이라고 할 수 있다. 과적합, Vanishing gradient 등과 같은 명백한 단점이 존재하여 역전파 알고리즘(Back Propagation)의 단점을 보안하려는 연구가 계속되고 있음에도 불구하고, 여전히 많은 딥러닝 아키텍처는 역전파 알고리즘을 기반으로 데이터를 "학습"한다. 역전파 알고리즘(Back Propagation) 모델의 출력값과 기댓값을 비교하여 차이(오차)를 줄여나가는 방향으로 Weight update를 하고, 상위층에서 역전파하여 하위층에서 이를 근거로 다시 weight를 업데이트하는 것 상위층인 출력.. 더보기
MLE(Maximum Likelihood Estimation), 음의 로그우도(Negative log-likelihood) 머신러닝은 주어진 데이터를 가장 잘 설명하는 '함수'를 찾는 알고리즘을 디자인한 것이다. 그렇다면, 주어진 데이터가 아닌 관측하지 못한 데이터에 대해서 해당 '함수'가 얼마나 정확한 예측을 해낼 수 있을까? 다음과 같은 문제를 일반화 문제라고 하는데, 머신러닝의 목표는 주어진 데이터를 잘 학습하는 optimization이 아니라, 우리가 관측하지 못한 데이터(unseen data)에 대해서 일반화(generalization)하는 것이다. 이러한 일반화를 위해 우리는 실제 확률 분포로부터 샘플링하여 수집된 데이터만을 가지고 " 현상을 가장 잘 설명하는 확률 분포 모델"을 추정함으로써, 우리가 알고 싶은 실제 확률 분포를 근사하게 된다. 이때 주어진 데이터를 잘 추정하기 위해 가능도를 최대화하도록 파라미터를.. 더보기