카테고리 없음

0223

getfeelingsfrom 2026. 3. 5. 15:47

1. 데이터의 변환 (Data Transformation) : 비정형에서 정형으로

컴퓨터는 숫자로 된 데이터만 이해 가능하므로, 모든 데이터는 **텐서(Tensor)**라는 다차원 행렬 형태로 변환되어야 함.

  • 비정형 데이터 → 정형 데이터: 컴퓨터가 이해할 수 없는 텍스트, 음성, 영상 데이터를 수치화된 행렬(Matrix) 형태로 변환하는 필수 과정.
  • 데이터별 텐서화(Tensorization):
    • 텍스트: 단어를 고차원 벡터로 변환하는 임베딩(Embedding) 처리.
    • 음성: 파형을 주파수 성분으로 분해하여 수치화.
    • 영상: 픽셀의 **색상 정보(RGB)**를 0~255 사이의 숫자로 구성된 3차원 텐서로 변환.

2. TensorFlow 및 연산 구조

  • TensorFlow: 다차원 배열인 Tensor를 이용한 데이터 흐름(Data Flow) 및 복잡한 연산을 효율적으로 처리하는 구글의 오픈소스 프레임워크.
  • 데이터 흐름: $Input \rightarrow Layer_1 \rightarrow Layer_2 \dots \rightarrow Output$ 구조로 데이터가 층을 새로운 데이터로 변환되며 통과하며 추상화됨.

3. CNN(합성곱 신경망) 기반 이미지 처리 프로세스

  • 입력(Input): 전처리된 원본 이미지 데이터.
  • Convolutional Layer (하위층):
    • 필터(Kernel)를 통해 국소적 영역의 이미지의 특징(선, 면, 질감 등)을 추출.
    • 윤곽 형태가 뚜렷해지는 현상 발생.
    • 픽셀 수준의 미세 변화 감지.
  • Feature Map: 필터 연산을 거쳐 나온 결과물로, 이미지의 주요 특징이 강조된 데이터 지도.
  • Neural Network (상위층):
    • 추출된 Feature Map을 1차원으로 펼쳐(Flatten) 분류(Classification)를 수행하는 단계.
    • 위로 갈수록 하위층의 특징들이 조합되어 눈, 코, 입, 바퀴 등 패턴이 복잡한 형태의 학습이 이루어짐.
    • 최종 출력: $y$값 도출 (ex: 고양이일 확률 98%).

CNN의 계층적 학습 및 추상화 과정

  • 하위층 (Lower Layers): 국소적 특징 추출
    • 필터(Filter/Kernel) 연산을 통해 이미지의 아주 작은 영역(국소적)을 훑으며 학습
    • 선, 면, 대각선 등 단순하고 날카로운 윤곽선(Edge) 형태가 뚜렷하게 검출됨.
    • 픽셀 수준의 미세한 변화를 감지하는 단계.
  • 상위층 (Higher Layers): 복잡한 패턴 및 형상 학습
    • 하위층에서 뽑힌 단순한 윤곽선들이 조합되어 눈, 코, 입 또는 바퀴, 창문 같은 **복잡한 형태(Part/Object)**로 진화.
    • 층이 깊어질수록 단순 수치 데이터가 아닌, 대상의 개념적인 패턴을 학습하게 됨.
  • 이미지 특화 학습 (Spatial Hierarchy)
    • 이미지의 공간적 구조(Spatial Structure)를 유지하며 학습하기 때문에 일반적인 NN보다 이미지 인식 성능이 압도적임.
    • 세밀한 질감부터 전체적인 구도까지 단계별로 파악.
  • 데이터의 압축 및 추상화 (Abstraction)
    • Pooling(풀링) 등을 거치며 불필요한 정보는 버리고 핵심 특징만 압축된 형태로 상위층에 전달.
    • 결과적으로 네트워크는 "픽셀 하나하나"가 아닌 "사물의 정체"라는 추상화된 정보만 남겨 최종 분류($y$)에 사용.

사전 학습 모델(Pre-trained Model) 활용

  • Feature Extractor (특징 추출기): 거대 데이터(ImageNet 등)로 이미 학습된 모델의 **하위층(Convolutional Layers)**을 그대로 가져와 사용.
  • 장점: 밑바닥부터 학습시킬 필요 없이, 사물의 기초적인 특징(선, 면, 질감)을 뽑아내는 능력을 그대로 복사해 옴.

파인 튜닝 (Fine-tuning) 전략

  • 상위층 교체: 사전 학습 모델의 맨 윗부분(분류기/FC Layer)은 기존 목적에 맞춰져 있으므로, 이를 제거하고 나의 목적에 맞는 새로운 상위층을 부착.
  • 가중치 고정(Freezing): 하위층은 일반적인 특징을 잘 뽑으므로 처음에는 학습되지 않게 잠궈둠.
  • 미세 조정(Adjustment): 학습 후반부에 하위층의 일부 가중치까지 아주 낮은 학습률(Learning Rate)로 다시 업데이트하여, 내 데이터에 최적화된 '세밀한 조정' 단계 진입.
conv_base  = keras.applications.vgg16.VGG16(
    weights="imagenet",
    include_top=False) 
#Fully Connected Layer(분류기) 제외하고 Convolutional Base 13개 층만 가져오겠다는 뜻.
conv_base.trainable = False #훈련가능 여부 f=> 고정된 상태
  • include_top=False
    • 의미: VGG16 모델의 맨 윗부분인 **Fully Connected Layer(분류기)**를 제외하고 특징 추출기(Convolutional Base)만 가져오겠다는 뜻.
    • 구조 변화: 원래 VGG16은 13개의 합성곱 층(Conv) + 3개의 완전 연결 층(FC)으로 총 16개인데, 여기서 FC 3개를 떼어내고 13개의 층만 사용함.
    • 목적: 기존 모델은 1,000개의 사물을 분류하도록 학습되었지만, 내 데이터(예: 고양이/강아지 2종 분류)에 맞게 새로운 분류기를 달기 위함.
  • conv_base.trainable = False (가중치 동결)
    • 의미: 가져온 13개 층의 파라미터(Weight)가 학습 중에 업데이트되지 않도록 잠금(Freezing) 처리.
    • 이유: 이미 ImageNet으로 잘 학습된 '특징 추출 능력'을 파괴하지 않기 위해서임.
    • 효과: 학습 속도가 비약적으로 빨라지고, 적은 데이터로도 과적합(Overfitting) 없이 안정적인 학습 가능.

튜닝을 왜 해야되는건지?>?!?!?\

GG16(13개 층) 선택적 동결 로직

conv_base.trainable = True #con_base는 16개층 아니고 13개층임 !! 
for layer in conv_base.layers[:-4]:#처음부터 마지막 4개를 제외
    layer.trainable = False 
  • conv_base 체킹:
    • include_top=False 설정 시, 전결합층(FC) 3개가 빠진 13개의 합성곱 층만 존재함.
    • 따라서 conv_base.layers의 전체 개수는 13개(정확히는 Pooling 층 포함 시 총 18개 내외지만, 핵심 연산 블록 기준).
    • = 상위 Fully Connected Layer를 떼어내고, 특징 추출기만 가져오겠다는 뜻
  • conv_base.trainable = True: ◦ 일단 13개 층 전체의 가중치($W$) 수정 권한을 활성화함.
  • for layer in conv_base.layers[:-4]: layer.trainable = False:
    • 동결 구간 (Index 0 ~ 뒤에서 5번째): 앞쪽의 하위~중간층들은 학습되지 않도록 다시 잠금. (이미 일반적인 특징을 잘 뽑으므로 고정)
    • 해제 구간 (마지막 4개 층): 가장 고차원적인 특징을 뽑는 최상위 4개 층만 $W$를 내 데이터에 맞춰 미세 조정(Fine-tuning)

지도기반미세조정 (SFT)

질문-정답 형태의 데이터로 학습

full fine tuning의 목적은 ?

나한테 특화된 모델을 만들기위해서

원하는 정확도에 맞추기 ㄷ위해서

Fine Tuning

  • 나만의 모델을 생성 = 기존 모델(사전훈련모델) + 내 data (소량일지라도 가능)
  • 사전 훈련 모델 사용범위
    • Full Fine Tuning
    • Selectie Fine Tuning : 하위층을 재활용, 상위층의 w값을 재 조정
    • 문제점 : 기존의 학습된 정보력 누실
  • 효율적인 매개변수 조정 (PEET : parameter - efficient fine-tuning
    • LORA(Low Rank adaption) : 뉴 명령어가 들어오면 기존의 방식대로
      • 기존의 가중치를 건드리지 않고
      • 옆에 있는 보조행렬 두개를 부팅해서 이 부분만 학습 시키는 가
    • QLoRA (Quantized Low Rank Adatpion)
      • 양자화(데이터 압축)을 모델이 사용하는 모델의 용량을 줄인 기술

딥러닝 모델 만들떄 튜닝을 하라는 뜻 !!!! << 파이널 떄 해도돼

왜 전체 튜닝(Full Fine-tuning)이 어려울까?

  • 비용 문제: 수십억 개의 매개변수($W$)를 전부 업데이트하려면 엄청난 메모리와 GPU 연산 비용(돈)이 발생함.
  • 비효율성: 범용적 지식(세상의 일반적인 법칙)을 이미 가진 모델에게 새로운 지식 조금 넣으려고 전체를 다 바꾸는 건 빈대 잡으려고 초가삼간 태우는 격.
  • 지식 누실: 너무 많이 건드리면 원래 잘하던 것까지 못하게 됨.

$h = W_0x + \Delta Wx = W_0x + BAx$ ◦ $h$ (출력): 최종 결과물. ◦ $x$ (입력): 모델로 들어오는 데이터. ◦ $W_0$ (사전 훈련 가중치): 이미 학습된 거대한 고정값 (Freeze). 수정 안 함.$\Delta W$ (가중치 변화량): 새로운 지식에 의해 업데이트되어야 할 부분. • 핵심 아이디어 ($BAx$): ◦ $\Delta W$를 직접 구하려면 너무 크고 무거우니, 이를 **작은 두 개의 행렬 $B$와 $A$**로 쪼개서 표현 ($\Delta W = B \times A$). ◦ $B$와 $A$만 수정: 사전 훈련된 $W_0$은 그대로 두고, 옆에 붙은 작은 $B, A$의 값만 찾아서 수정함. ◦ 계산 효율성: 전체 $W$를 다 계산할 필요 없이, 새로 들어온 데이터($x$)에 대응하는 **변화량($BAx$)**만 빠르게 계산해서 합치면 끝.

로라를 먼저 해서 되면 파인튜닝 넘어가고 (가벼움)

안되면 파인튜닝 하러 가야됨 ..


1. 데이터의 변환: 비정형에서 정형으로

컴퓨터는 숫자로 된 데이터만 이해 가능하므로, 모든 데이터는 **텐서(Tensor)**라는 다차원 행렬 형태로 변환되어야 함.

  • 비정형 데이터 → 정형 데이터: 텍스트, 음성, 영상 등 형식이 없는 데이터를 수치화된 행렬로 변경하는 필수 과정.
  • 영상 데이터: 픽셀의 **색상 정보(RGB)**를 0~255 사이의 숫자로 구성된 3차원 텐서로 변환.
  • 텍스트 데이터: 단어의 의미를 수치화하여 고차원 공간에 배치하는 임베딩(Embedding) 처리.
  • 음성 데이터: 파형을 주파수 성분으로 분해하여 수치화.

2. TensorFlow와 연산 구조

  • TensorFlow: 텐서라는 데이터를 층(Layer) 사이로 흘려보내며(Data Flow) 복잡한 연산 작업을 쉽게 구현하도록 돕는 프레임워크.
  • 연산 흐름: $Input \rightarrow Layer_1 \rightarrow Layer_2 \dots \rightarrow Output(y)$. 데이터가 층을 통과할 때마다 새로운 데이터로 변환되며 점진적으로 추상화됨.

3. CNN(합성곱 신경망)의 특징 추출 원리

이미지에 특화된 세밀한 학습이 이루어지는 과정.

  • 하위층 (Lower Layer): 필터(Kernel)를 통해 국소적 영역을 스캔. 선, 면, 대각선 등 윤곽 형태가 뚜렷해지는 현상 발생. 픽셀 수준의 미세 변화 감지.
  • 상위층 (Higher Layer): 위로 갈수록 하위층의 특징들이 조합되어 눈, 코, 입, 바퀴 등 패턴이 복잡한 형태의 학습이 이루어짐.
  • 데이터의 압축(추상화): 풀링(Pooling) 등을 거치며 정보가 압축된 형태로 상위층에 남음. 결국 "픽셀 하나하나"가 아닌 "사물의 정체"라는 추상화된 정보만 남겨 최종 $y$를 분류.
  • Feature Map: 필터 연산 결과물로, 이미지의 주요 특징이 강조된 데이터 지도.

4. 사전 학습 모델 및 VGG16 활용

  • 사전 학습 모델: 이미 거대 데이터(ImageNet)로 학습된 모델의 Feature Extractor(하위층)를 재활용. 소량의 데이터로도 고성능 구현 가능.
  • **VGG16 실전 코드:**Python
  • conv_base = keras.applications.vgg16.VGG16( weights="imagenet", include_top=False) # 16개 층 중 FC층 3개 빼고 13개(Conv base)만 사용 conv_base.trainable = False # 가중치 동결 (이미 학습된 능력 보호)
  • include_top=False 의미: 1,000개 분류를 하던 상위 Fully Connected Layer를 떼어내고, 특징 추출기만 가져오겠다는 뜻. 내 데이터(예: 2종 분류)용 상위층을 새로 달기 위함.

5. 파인 튜닝(Fine-Tuning) 전략

나만의 모델 생성 = 기존 모델(사전훈련) + 내 데이터.

  • **Selective Fine-Tuning (선택적 동결):**Python
  • conv_base.trainable = True # 일단 13개 층 다 깨움 for layer in conv_base.layers[:-4]: # 처음부터 뒤에서 4개 제외하고 layer.trainable = False # 하위층은 고정, 상위 4개 층만 W 조정
  • 이유: 하위층은 일반적 지식이므로 재활용하고, 상위층만 내 데이터에 맞춰 미세 조정(Adjustment)하여 정확도를 끌어올림.
  • 문제점: 정보력 누실. 너무 많이 튜닝하면 기존의 범용 지식을 잃어버릴 수 있음.

6. 효율적인 매개변수 조정 (PEFT)

전체 튜닝은 돈(GPU 연산비)이 너무 많이 들고 비효율적임. 범용 모델에 새로운 지식은 조금만 넣어도 충분하기 때문.

  • LoRA (Low Rank Adaptation):
    • 기존 가중치($W_0$)는 건드리지 않고(고정), 옆에 **작은 보조 행렬 두 개(B, A)**를 붙여 이 부분만 학습.
    • 수식: $h = W_0x + \Delta Wx = W_0x + BAx$
    • 새로 들어오는 데이터에 대한 $W$값 변화량($BAx$)만 찾아서 수정하면 되므로 전체 계산 불필요. 훨씬 가볍고 빠름.
  • QLoRA (Quantized LoRA): 양자화(데이터 압축) 기술을 적용해 모델 용량을 줄여 엣지 AI 등 저사양 환경에서도 튜닝 가능하게 함.
  • SFT (지도 기반 미세 조정): 질문-정답 형태의 데이터로 학습하여 특정 목적에 특화된 모델 제작.

💡 실전 요약 및 결론

  1. 전체 튜닝은 비추: 돈 많이 들고 기존 지식 망가짐.
  2. LoRA 먼저: 가볍게 보조 행렬만 학습해 보고, 성능 안 나오면 그때 파인 튜닝으로 넘어갈 것.
  3. 파이널 프로젝트 팁: 딥러닝 모델 만들 때 처음부터 다 만들지 말고, 사전 학습 모델 가져와서 위 방식대로 튜닝하는 게 핵심!

 

 

컴퓨터 비전 

  1. 이미지 분류
    • 이미지에 하나 이상의 레이블을 할당하는 것
  2. 이미지 분할 (segmentation)
    • 이미지를 다른 영역으로 나누거나 분할
    • 각 영역은 일반적으로 하나의 범주로 나타냄
  3. 객체 탐지( object detection)
  • 이미지에 있는 관심 객체 주변에 바운딩 박스 그림
  • 나머지 공간도 박스가 있는데 투명처리가 되어있는것