Data-Distortion Guided Self-Distillation for Deep Neural Networks , AAAI 2019

 

배경: Knowledge distillation 

큰 모델의 model confidence (softmax output)은 이 큰 모델이 학습한 지식을 담고있지 않을까라는 가설로 시작됩니다. 큰 모델의 결과물(증류된 정보)을 이용해서 작은 모델을 간단히 학습할 수 있지 않을까라는 생각입니다 [1]. 즉 큰 모델의지식(knowledge)이 model confidences 분포이겠구나라는 것입니다. 

아래의 그림과 같이 Teacher model이 훨씬 큰 딥러닝모델이고, Student모델이 더 작은 모델입니다. 큰 모델의 예측결과(model confidences)자체가 큰 모델의 지식이라는 것입니다. 예를 들어, 고양이가 6번인덱스의 클레스였다면, 0번은 낮고, 1번도 낮고..., 6번이 제일 큰데 0.4정도라는 이 분포자체가 Teacher모델이 갖고있는 큰 파라미터의 지식이 됩니다. 이를 답습하자는것이 Student모델의 학습목표입니다.

Knowledge distillation 방법론

흔히 지식증류(knowledge distillation)방법들은 학습방법에 따라, 3가지로 나뉩니다. 

  1. teacher-to-student: 큰 모델의 지식(logits, feature map,attention map등)을 작은 모델이 더 잘학습시키기 위한 방법론. 서로 다른 모델이 2개가 있어야하며, Teacher model은 학습되어있다고 가정합니다.
  2. student-to-student: 서로 다른 작은 다른 모델(student)을 서로 다른 초기값을 가지게하고, 학습을 동시에 해가면서 지식의 차이를 점점 줄여가나는 방식입니다. teacher-to-student와는 다르게 이미 사전학습된 모델이 필요없는 On-line training 방법입니다.
  3. self-distillation (self-teaching): 하나의 네트워크를 이용하며, 이미지 1개를 데이터 증강(random, rotation)등을 통해서 2개로 만들고, 서로 다른 지식을 일치시키는 방법을 사용합니다. 즉, 하나의 네트워크를 사용하며, 서로 다른이미지를 추론했음에도 분포가 같아야하는 모델 일반화가 더 잘되는 방법으로 학습을 유도합니다.

 

방법: Self-distillation

Self-distillation은 크게 4단계로 이어집니다.

1. Data distortion operation: data augmentation 방법과도 같습니다. 같은 원본데이터로, 서로 다른 두 이미지를 생성합니다.

2. Feature extraction layers: 하나의 모델에 두 증강된 이미지를 통과시켜 특징값(feature)을 얻습니다. 여기서는 두 특징값(벡터)의 차이를 계산합니다. 

MMD은 Maximum Mean Discrepancy을 의미하며, 두 증강된 이미지를 특징으로 만든 벡터의 차이를 의미합니다. 수식으로는 아래와 같습니다.

$MMD_{emp}=||\frac{1}{n}\sum_{i=1}^{n}\mathbf{h}(x_{ai})- \frac{1}{n}\sum_{i=1}^{n}\mathbf{h}(x_{bi})||_{2}^{2}$

$ \mathbf{h} $은 네트워크를 의미합니다. 즉 $ \mathbf{h} (x_{ai}), \mathbf{h} (x_{bi})$ 은 서로 다른 이미지를 하나의 네트워크에 태워 얻은 벡터를 의미합니다. 이 벡터의 차이를 계산하는 것이 MMD입니다. 

3. Classifier: classifier레이어에 통과시킵니다.

4. Predictor: 사후확률($\mathbf{p}(y|\mathbf{x}_{i})$)을 이용해서 2가지를 계산합니다. 하나는 분포의차이(KL divergence), 또 하나는 classification loss (cross-entropy loss)입니다.

  • KL divergence은 방향이 없기에 양방향으로 $KL(\mathbf{p}_{a}, \mathbf{p}_{b}), KL(\mathbf{p}_{b}, \mathbf{p}_{a})$을 둘 다 계산합니다. 
  • Classification loss은 두 이미지에 대해서 라벨을 이용해서 classification을 계산합니다.

KL diveregnce loss 2개, classification loss2개, MMD loss을 합산, 총 5개의 손실함수를 합산하여 모델을 학습시킵니다.

Results

첫 번째 결과는 CIFAR-100에서의 분류성능이고 동일한 파라미터수에서는 가장 낮은 테스트에러를 보였습니다.

두 번째, 결과는 모델의 크기에따라, self-distillation을 할때 어느정도 큰 차이가 나는지를 확인해봤습니다. 작은모델에서 distillation할때 성능이 크게 향상되는 것을 볼 수 있습니다. 즉, 이 방법론을 사용할거면 작은모델을 사용하는 접근이 유리해보입니다.

세 번째, 결과는 다양한 네트워크를 이용한 종합적인 성능인데, 모두 SD(Self-distilation)을 이용하는 경우 더 좋은 성능을 보였습니다.

네 번째 결과로, 데이터가 매우 큰 경우에서도 잘 동작하는지를 봤는데, 데이터가 매우 큰 경우에는 성능향상이 있었는데, 그렇게 큰 차이는 아닌 것 같내요.

Self-supervised learning vs self-distillation

두 방법론은 1)augmetentation이 둘 다 사용되고, 2) 하나의 네트워크를 학습한다는 것에 공통점이 있습니다.

하지만, SSL(Self-supervised learning)은 라벨이 필요없는 데이터로 학습한다는 것에 큰 차이가 있습니다.

SD(Self-distillation)은 총 5가지의 손실함수를 사용하는것중에 2개의 손실함수는 classification loss가 사용되니 라벨이 반드시 필요한 방법론이 됩니다.

 

References

[1] https://arxiv.org/abs/1503.02531

반응형

API 요청을 관리하는 데에는 여러 이유가 있습니다. 그 중에서도 토큰 버킷을 사용하는 이유는 다음과 같습니다:

  1. 트래픽 제어: 토큰 버킷을 사용하면 API로 들어오는 트래픽을 제어할 수 있습니다. 이를 통해 서버에 과도한 부하가 걸리는 것을 방지하고, 서비스의 안정성을 유지할 수 있습니다.
  2. 사용량 제한: 토큰 버킷을 이용하면 API를 사용하는 클라이언트의 요청 수를 제한할 수 있습니다. 이는 과도한 사용량으로 인한 서버 과부하를 방지하고, 공정한 서비스 이용을 보장합니다.

 

TokenBucket 만들기

토큰 버킷 패턴은 고정된 속도로 토큰을 생성하고, 요청이 들어올 때마다 토큰을 소비하여 일정량의 토큰을 가지고 있는지 확인하여 처리하는 방식입니다. 알고리즘은 아래와 같습니다.

  1. TokenBucket은 버켓(바구니)가 있다고 가정합니다.
  2. 요청이 들어오면, 버켓에서 1개를 소비해서 그 다음의 로직을 진행시킵니다. 요청이 들어왔을 때 버킷에 토큰이 없으면 drop합니다.
  3. 고정된 속도(r)로 버킷에 토큰채웁니다. 

https://www.researchgate.net/figure/Diagram-representing-token-bucket-algorithm_fig1_351452059

 

TokenBucket 을 middle ware 에 추가

- FastAPI의 starlette을 베이스로 작성되어있어서, 이 미들웨어를 서브클레싱해서 손쉽게 token bucket을 사용할 수 있습니다.

- starlette.middleware.base.BaseHTTPMiddleware을 초기화시 app을 받게되어있고 이 베이스클레스는 dispatch라는 함수를 구현하게어 있습니다.

class BaseHTTPMiddleware:
    ...
    
    async def dispatch(
        self, request: Request, call_next: RequestResponseEndpoint
    ) -> Response:
        raise NotImplementedError()  # pragma: no cover

 

dispatch을 함수를 아래와 같이 구현해서 bucket.consume_token()이라는 함수가 bool으로 false or True을 구현하게 함에따라, 예외를 일으킬것인지 다음 로직을 실행시킬것인지를 결정하게 작성합니다.

 

위의 구현을 위해 아래와 같이 tokenbucket을 정의합니다.

초기화시, 버킷의 토큰 최대 저장량(max_len)과 토큰을 채우는 시간(r, refill_rate)을 지정하여 아래와 같이 작성합니다.

 

실행

- 다음과 같이 python3으로 fastAPI을 구동시킵니다.

(misc) (base) heon@gpusvr03:~/repositories/misc/tokenbucket_ex$ python3 app.py 
INFO:     Started server process [4121818]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:30000 (Press CTRL+C to quit)

 

그 후 요청 15개를 보내봅니다. 아래와 같이 10개를 토큰을 다 소비한경우 5개의 요청이 예외처리됩니다.

>>> import requests
>>> requests.get("http://0.0.0.0:30000/")
<Response [200]>
>>> for _ in range(15):
...     requests.get("http://0.0.0.0:30000/")
... 
<Response [200]>
<Response [200]>
<Response [200]>
<Response [200]>
<Response [200]>
<Response [200]>
<Response [200]>
<Response [200]>
<Response [200]>
<Response [200]>
<Response [500]> # 토큰 10개 소비되어 예외처리
<Response [500]>
<Response [500]>
<Response [500]>
<Response [500]>

 

반응형

"-e" 옵션은 설치한 경우 파이썬 패키지를 담는 "site-packages" 디렉토리에 설치되는 것은 동일하나, 심볼릭 링크로 설치가되어 원본소스코드가 변경된 후, 별도의 pip install 명령어 없이, import시 바로 변경사항이 반영되는 옵션

 

pip install -e 옵션

종종 github에서 `pip install -e .`로 "-e"옵션을 함께 전달하여 파이썬 패키지를 설치하라는 리포지토리가 있습니다

 

예시로 아래와 같은 패키지 디자인의 경로가 있다고 가정합니다. 

(camelyon) @gpusvr03:~/repositories/camelyon$ tree -L 1
.
├── camelyon
├── data
├── LICENSE
├── logs
├── notebooks
├── README.md
├── setup.py
├── tiling_version16.py
├── tiling_version17.py
└── utils.py

이 패키지의 setup.py에는 다음과 같이 설치 명령어가 있습니다. 이 setup.py을 이용하여 "$pip install ."을 해보겠습니다.

아래와 같이 잘 설치됨을 알 수 있습니다. 패키지 설치장소는 가상환경인 "/home/heon/anaconda3/envs/camelyon"에 설치되었습니다. 

 

 

설치한 패키지를 들어가보면, setup.py에서 지정한 p.y파일들이 들어가있습니다.

 

이 패키지를 지우고, pip install -e 옵션으로 설치해보겠습니다. 패키지가 설치된 장소를 들어가보면, *.egg-link만 있습니다.

이 링크의 내용물은 경로만 담겨져 있습니다.

 

*egg.link 파일은 내부에 파일하나나 디렉토리만 담고있습니다. 심볼릭링크를 지원하기위한 파일입니다. 즉, 설치는 했지만 바라보는 소스코드는 원본을 바라보고 있어서, 디렉토리의 변경사항을 바로 추적할 수 있습니다.

https://wiki.python.org/moin/PythonPackagingTerminology

반응형
 

Method

- 모델아키텍처

VLM (Vision Lanuage Model)으로 슬라이드 이미지를 입력으로 레포트를 생성하는 것을 의미합니다 (Figure 2A). 컴포넌트는 2가지입니다. 비젼모델과 언어모델입니다.

  1. VFM(Vision Foundation model): visual features을 생성합니다. 모델은 CTransPath: Swin transformer로 TCGA, PAIP데이터셋을 SSL로 학습한 모델입니다.
  2. Lanuage model: Vision feature와 프롬프트을 언어모델에 전달한 결과를 cross-attention을 이용하여 최종 레포트를 내는 모델입니다. model: BioGPT(Auto-regressive generative model의 Transformer중 디코더 파트만)을 사용했습니다.
  3. Resampler: : 이미지의 일부만 사용하기 위한 장치입니다.
  4. Cross Attention block: 언어모델의 특징, 프롬프트의 특징을 통합하기 위한 블록입니다.
 
이미지 전처리
1. 100X 확대에서의 tiling (mpp1) + non overlapping
2. normalization (pytorch preprocessing 하듯)
 
모델의 학습
1. CTransPath라는 사전학습모델을다시 MIL을 이용해서 재학습시켰다고합니다.
2. CTransPath의 파라미터는 프리징시키고, 언어모델만 파인튜닝합니다.
3. 학습 시 text augmentation을 시킵니다. text augmentation은 GPT-4을 이용해서 paraphrases 시킵니다.
 

 

추론

0. 이미지와 프롬프트의 짝을 VLM에 전달합니다.
1. 이미지를 타일링합니다(tessellation)
2. 비전모델(CTransPath)에 포워딩합니다
3. 이미지 피쳐중에서 일부만 샘플링합니다(Perceiver resampler)
4. 프롬프트는 토큰화되서 언어모델에 전달됩니다.
5. 언어모델의크로스 어텐션블록에서 통합합니다.
Perceiver resampler라는 샘플링 방법을 썼다고합니다.
6. Ensemble refinemnet: 여러개의 pathology report을 생성하게하고, GPT4 모듈을 이용하여 합치도록 합니다.

 

실험

  • 데이터셋: 13,000 WSI을 학습(출간시 데이터 공개, 10TB)
  • 벤치마크모델: BioGPT-1B(Text only), GPT-4V(Vision only), Lower baseline(랜덤으로 선택된 병리보고서), Upper baseline(같은 진단명을 가진 두 병리 보고서선택)
  • Metrics:
    1) 중요한 단어의 매칭
    2) 중요한 텀의 매칭(키워드 추출임. ScispCy, NER tool임)
    3) BioBERT에서 유사도 확인: cosine similarity
    4) GPT-3-ADA을 이용한 유사도 확인
 

 

결과

Figure 4: 유사도도 꽤나 성능 좋음
A. 프롬프트 및 이미지를 이용한 포워딩 방법 예시
B. 기존방법론과의 비교: 텍스트 전체를 예측하는 것이어서 좀 어려운 것 같음
C. 프롬프트로만 예측한 분류성능
D. 내부 데이터셋의 데이터분포
E. Accuacy 상에서(회색) MIL이 더 잘맞추긴하지만 HistoGPT1B도 잘맞춤. (GPT-3B은의외로 언더퍼폼)
F. 유사도는 전반적으로 ER모델이 잘맞춤.
 
Figure 5: Zeroshot으로 tickness도 잘맞춤
A. 예측된 tumor tickness랑 regression했을때도 상관있게 나옴.
B. 예측된 tumor tickness랑 regression했을때도 상관있게 나옴. 몇몇 셋은 좀 틀렸는데 알고보니 단위가 달랐음
C. Figure 5B의 플롯팅(attention map)
D. External validatrion set에서의 예측. 슬라이드레벨은 잘맞추는데, 패치수준에서는 못맞추는듯.
E. 암종의 침윤에 따라, Gradient attention map확인
 
 
반응형
조직병리학(Histopathology)은 종양의 형태(morphology)와 표현형(phenotype)등 진단을 위한 부가적인 정보를 연구하는 학문입니다. 대부분 조직병리학에서는 H&E(Hematoxylin & Eosin)으로 조직을 염색합니다. 이때, 표현형의 정보를 부가적으로 더 얻기위해서, 유전학정보를 추가하기도합니다. 유전학 관련 정보에서는 환자의 생존율, 항암제 반응등을 추가로 더 연계합니다. 2021년기준으로 FDA에 243종의 항암제가 승인되어서, 관련 연구는 더 활발해지고 있습니다. 최근에는 AI을 이용한 연구로 DP을 접목시키고자하는데 관련 연구들이 어떤 것들이 있는지 개괄적으로 살펴보겠습니다.
 

딥러닝을 이용한 조직병리학

- 조직병리학에서는 고형암을 병리학(pathology)이나 세포학(Cytology)을 이용하여 검사합니다. 이 때 슬라이드이미지(Whole slide image)을 얻게되는데요. 이 슬라이드 이미지 내에, label에 해당하는 조직이 포함되어있는지를 Slide level label로 사용합니다. 예를들어, 슬라이드이미지 내에 종양이 있는지가 이에 해당합니다. 그렇기에 전체 슬라이드 중에 하나의 종양이라도 있으면 positive로 분류하는 weakly supervised learning형태로 주로 연구가되고있습니다.
 

 

시대적으로 주요했던 연구는 아래와 같습니다.
 

Fundamental task

- 2015 (Erosun and Rubin) : Brain tumor에서의 histologycal grading.
- 2017 (Cruz-Roa et al): Breast Ca tumor dectection. 타일링(Tesselating)도 진행. Accurate and reproducible invasive breast cancer detection in whole-slide images: A Deep Learning approach for quantifying tumor extent. Sci Rep(https://doi.org/10.1038/srep46450.)
- 2019 (Campanella G et al): weakly supervised learnig. Clinical-grade computational pathology using weakly supervised deep learning on whole slide images
- 2020 : 고형암의 subtyping 을 예측 (Gleason grade 예측 및 segmentation). Artificial intelligence for diagnosis and grading of prostate cancer in biopsies: a population-based, diagnostic study. Automated deep-learning system for Gleason grading of prostate cancer using biopsies: a diagnostic study.
- 2021: Breast ca 에서의 HER2 enriched, luminal A, luminal B, normal, basal 등의 분자진단에 사용되는 서브타입 예측.A deep learning image-based intrinsic molecular subtype classifier of breast tumors reveals tumor heterogeneity that may affect survival
 
 

Advanced task

1. Biomarker prediction (or genetic mutation)

- 2020: TCGA 17,000 WSI을 모두 학습한 딥러닝모델 연구. 높은 분류성능. 분자진단에 활용가능한 바이오마커(TP53, BRAF, TIL)도 예측이 가능. 2) MSI(Microsatellite instability)의 바이오 마커도 예측
A deep learning image-based intrinsic molecular subtype classifier of breast tumors reveals tumor heterogeneity that may affect survival
Pan-cancer computational histopathology reveals mutations, tumor composition and prognosis
 

2. Clinical outcome 예측

2.1 Response 예측
- biomarker은 환자의 outcome을 예측할 수 있는 간접적지표(proxy)임.
- 2020: CTx 반응을 예측 (Nasopharygeal Ca)[48]. Neuadjuvant CTx후에 CR(Complete response)예측[49]. 면역항암제 예측 반응 예측[50]
[48] Deep learning pathological microscopic features in endemic nasopharyngeal cancer: Prognostic value and protentional role for individual induction chemotherapy
[49] Deep learning-based predictive biomarker of pathological complete response to neoadjuvant chemotherapy from histological images in breast cancer
[50] Using Machine Learning Algorithms to Predict Immunotherapy Response in Patients with Advanced Melanoma. Clin Cancer Res
 
2.2. Prognosis 예측
- Survival 등의 예측입니다.
- 2019: Tissue proportion [52]와 모양형태가 환자 survival에 연관있을 수 있음을 예측[51]
[51] Comprehensive analysis of lung cancer pathology images to discover tumor shape and boundary features that predict survival outcome
[52] Predicting survival from colorectal cancer histology slides using deep learning: A retrospective multicenter study
 

3 Clinical genomics

- 암의 고유한 특징은 유전체 정보에 녹아있습니다. 그렇기에 인간유전체에 대한 해석을 연구하는 것이 암의 임상유전학에서 매우 중요합니다.
3.1 Subtyping
- 2022: Molecular subtyping (Non negative matrix factorization)을 이용한 unspervised ML로 클러스터링
3.2. Discover novel variants
- 2018: Cancer driver mutation 찾기.
3.2. Drug efficacy
- 2018: Cancer cell line에서 drug efficiacy 예측
 
 

4. Multimodality

- 임상적으로 환자의 치료과정을 이해할 때, 한 데이터만 분석하는게 아니라 다른 데이터도 분석합니다. 마찬가지로 최근 연구는 여러 데이터를 혼합(multi-modality)하여 분석하는 것을 연구합니다.
 
- 2018: Surival prediction. WSI와 IDH mutation, 1p/19q 데이터를 혼합하여 gliomas 환자의 survival을 예측 [99]
[99] Predicting cancer outcomes from histology and genomics using convolutional networks. PNAS
- 2019: WSI와 RNA expression data을 혼합하여 survival prediction을 예측 [100]
- 2021: Gliomas의 Grading 예측 [103]
- 2022: WSI, genomic data, radiology image 합친 연구
[100] Deep learning with multimodal representation for pancancer prognosis prediction. Bioinformatics
[103] Deep Neural Network Analysis of Pathology Images With Integrated Molecular Data for Enhanced Glioma Classification and Grading. Front Oncology
 
 

Outlook

- 데이터 많이 필요: Cacncer은 너무 heterogenous하기에 작은 사이즈의 데이터로는 편향이 있을 수밖에 없습니다.
- Internal bias: 성, 인종, 사회경제적 특징들에 따라 제한적
- Regulatory approval: 마켓에 나가기까지는 QC팀, 재무팀등의 지원이 필요
- Explainablity가 필요: Black box모델이라는 한계
반응형

 

 

 

회전변환시에 필요한 matrix을 roration matrix라고하며, 2D와 같이 표현할 수 있습니다.

$M(\theta)=
\begin{bmatrix}
    cos\theta & -sin\theta \\
    -sin\theta & cos\theta
\end{bmatrix}$

이 공식의 유도과정을 이해해보겠습니다.

그림1.

위 그림과 같이 구하고자하는 평면에 두 벡터가 있습니다. 이 그림의 요소들은 다음과 같습니다.

  • G(x, y): 회전시키기 전 벡터
  • G'(x',y'): G을 $\theta$만큼 회전시킨 벡터, 
  • r:G벡터와 G'벡터 길이
  • $\theta$: G을 G'으로 반시계방향(counter-clockwise)으로 회전한 벡터

위 그림에 따라 x, y은 아래와 같이 표현할 수 있습니다.

  • $ x=r cos v $  
  • $ y=r sin v $
  • $ x'=rcos(v+\theta)$
  • $ y'=rsin(v+\theta)$

3번 째, 4번째 식의 $ v+\theta$은 삼각함수의 덧셈정리로 풀면 아래와 같습니다.

  • $x'=rcos(v+\theta) = r(cos(v)\cdot cos (\theta) -sin(v)\cdot sin (\theta))$  (코코마사사)
  • $y'=rsin(v+\theta) = r(sin(v) \cdot cos (\theta) + cos(v) \cdot sin(\theta))$ (싸코코)

위 식에서 $cosv$ 와 $sinv$은 이미 알려져 있으니, 대입하여 알 수 있습니다. 

  • $x'=r(x \cdot cos(\theta) - y \cdot sin(\theta))$
  • $y'=r(x \cdot sin(\theta) + y \cdot cos(\theta))$  (x을 앞으로 정렬)

위 식에서 r이 1인 경우는 단순히 선형결합형태이므로, 선형결합 형태로 나타낼 수 있는 메트릭스로 표현 할 수 있습니다.

$\begin{bmatrix} x' \\ y' \end{bmatrix}= 
\begin{bmatrix}
    cos\theta & -sin\theta \\
    sin\theta & cos\theta
\end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix}$

 

Python implementation


파이썬으로 위의 방법을 구하면 아래와 같이 작성할 수 있습니다. 주의할 것은 여기서 는 각도이며, 여기서는 30도를 라디안 단위로 변환하여 사용해야 합니다.

import numpy as np

# 각도를 라디안으로 변환
theta = np.deg2rad(30)

# 회전 행렬 생성
R = np.array([[np.cos(theta), -np.sin(theta)],
              [np.sin(theta), np.cos(theta)]])

# G 벡터 생성 (임의의 값으로 설정)
G = np.array([1, 0])  # 예를 들어, G = (1, 0)으로 설정

# G' 벡터 계산
G_prime = np.dot(R, G)

print("G' 벡터:", G_prime)
print("회전 행렬:")
print(R)

 

References


https://www.cuemath.com/algebra/rotation-matrix/

반응형

+ Recent posts