https://huggingface.co/docs/peft/package_reference/adalora#peft.AdaLoraConfig.tfinal

 

AdaLoRA

🤗 Accelerate integrations

huggingface.co

 

안녕하세요

오늘은 Hugging face의 PEFT중 한 기법인 AdaLora를 활용해 원하는 Layer만 파인튜닝을 하는 방법을 소개해드리려고 합니당

 

실제로 연구를 하다보면 Pretrained model을 가져와서 사용할 때 특정 layer만 조작해주고 싶을 때가 있는데, 

이걸 target_modules 로 한번에 q, k, v로 설정해주면 모든 transformer를 다 파인튜닝 해버려 곤란하기도 합니다

 

예를 들어 encoder-decoder model이 있을 때, encoder만 finetuning 하고 싶을 경우 적용할 수 있는 방안에 대해서 소개시켜드리려고 합니다.

 

우선 AdaLoraConfig를 보면, 

 

   config = AdaLoraConfig(
                beta1=0.85,
                beta2=0.85,
                target_modules = get_encoder_layer_names(6, sublayers)
            )

 

이와 같이 target_modules인자가 존재하는데요.

여기에 원하는 k, q, v값을 넣어서 그 부분만 AdaLora를 적용해줄 수 있습니다.

 

근데 target_modules에 정확히 어떤 인자가 들어가야 하는지

hugging face의 document를 보아도

정보가 잘 나와있지 않습니다. 

 

그래서 제가 했던 방법을 소개시켜드리고자 합니다.

 

우선 print(model)을 했을 때 나온, 그 안 layer들을 가져와주어야 하는데요

 

 

sublayers = [
    'self_attn.k_proj', 
    'self_attn.v_proj', 
    'self_attn.q_proj', 
    'self_attn.out_proj', 
    'fc1', 
    'fc2'
    ]
    
def get_encoder_layer_names(num_layers, sublayers): #pretrained layer 수, 파인튜닝 하고자 하는 layer 이름
    names = []
    for i in range(num_layers):
        for sublayer in sublayers:
            name = f'encoder.layers.{i}.{sublayer}' # 원하는 module layer 작성
            names.append(name)
    return names
    
# 저의 경우 Whisper-base 모델을 활용하였습니다.
get_encoder_layer_names(6, sublayers)

 

위처럼 get_encoder_layer_names의 customize함수에 원하는 layer이름을 넣어줍니다.

저의 경우 encoder만 넣고 싶으니 encoder.layer~~ 이하로 설정 해주었습니다.

 

이후 

 

 config = AdaLoraConfig(
                beta1=0.85,
                beta2=0.85,
                target_modules = get_encoder_layer_names(6, sublayers)
            )
            
model = get_peft_model(model, config, "default")

 

 

를 설정해주면 

아래 그림과 같이 원하는 Layer에만 adaLora가 설정된 것을 확인할 수 있습니다!!! 

 

오늘은 파인튜닝 하다가 실제로 많이 접해볼 예제를 다루어보았는데요!

도움이 되셨으면 좋겠습니다. 

오늘의 포스팅 끗 ~!

안녕하세요!

자연어 처리에서 핵심 역할을 했었던, RNN과 이후 RNN을 기반으로 파생된 모델인 LSTM과 GRU에 대해 포스팅해보겠습니다.

Recurrent Neural Network (RNN)

RNN: Background

  • 시계열 데이터를 처리하기에 좋은 네트워크
  • RNN의 기본 전제는 sequence data의 각 요소가 서로 연관성을 가진 다는 것,
  • CNN 이 이미지 구역별로 같은 weight를 공유한다면, 시간 별로 같은 weight를 공유한다.
  • 기존의 신경망들 (DNN) 은 은닉층에서 activation function을 지나 출력됨 => Feed Forward Neural Network
  • But 시계열 데이터는 과거의 상태가 현재 상태에 영향을 미치며, 최종적으로는 Output에 영향을 미침.
  • 따라서 시계열 데이터를 처리하기 위해, RNN에서는 현재 시간의 상태 ($ x_t $) 가 이전 시간의 상태($ x_{t-1}$ 와, 현재의 입력 ($ u_{t}$) 에 관련이 있다고 가정함.
  • 그럼 다음과 같은 수식을 정의할 수 있음.
  • $x_t = f(x_{t-1}, u_t)$
    $y_t = h(x_t)$

Neural Network setting으로 함수 근사

  • $x_t = \sigma (W_{xx}x_{t-1} + W_{xu}u_t + b_x)$
    $y_t = \sigma (W_{yx}x_t + b_y)$
  • RNN (Recurrent Neural Network) 는 은닉층의 노드에서 activation function을 통해 나온 결과값을 출력층 방향으로 보내면서, 은닉층 노드의 다음 계산의 입력으로 보냄.

이러한 RNN은 대표적으로 두 가지 그림을 통해 표현할 수 있음. (bias는 생략)

  • 각각의 노드는 벡터 형태임.
  • 1번과 2번의 그림을 보면 알 수 있듯이, self feedback loop가 존재하는 것을 볼 수 있음. 그리고 $x_t$ 이전 까지의 상태와, 이전까지의 입력을 대표할 수 있는 압축본이라고 할 수 있다. 이러한 hidden state $x$를 셀(cell)이라고 하며, 이전의 값을 기억하는 메모리 역할을 수행하여 메모리 셀 or RNN 셀 이라고 표현한다.

우리가 알기 익숙한 형태로 시각화를 해보자면,

RNN: Problem Types

RNN은 입력과 출력의 길이를 다르게 설계할 수 있어 아래와 같은 3가지 task 로 나눌 수 있음.

  • Many-to-many (번역)
  • Many-to-one (예측): sentiment classification (입력 문서가 긍정 or 부정), spam detection
  • One-to-many (생성): Image captioning (사진의 제목 생성하기)

RNN: Training

RNN의 학습은 backpropagation의 확장형인 BPTT(Back Propagation Through Time)를 사용함

  • 가중치 W가 모든 시점에서 메모리 셀의 출력($y$)를 구할 때 사용되었기 때문에 0에서 k까지 계산하여 합하는 것임.
  • 이러한 Training 때문에, 전파가 길어질 수록 Gradient Exploding or Gradient Vanishing 현상이 발생함. (정보량의 손실)
  • Gradient Exploding => Gradient clipping (gradient가 일정 threshold가 넘어가면, clipping 해줌)을 해 줄 수 있음.
  • Gradient Vanishing => 학습 도중 파악하기 어려움. 만약 loss값이 0 이라면 학습이 종료된 것인지, 아니면 Vanishing gradient 인지 모름. 따라서 다른 네트워크 구조를 사용하는 것이 편함
  • 따라서 RNN은 긴 의존기간의 문제를 어려워함.

ex, The clouds are in the sky => sky를 맞추기 위해서는 이 문장만 봐도 해결 가능함. I grew up in France ... I speak fluent French => French 를 맞추고 싶다면 앞의 문맥부터 참고 해야함.
아래의 경우는 필요한 정보를 얻기 위해 시간 격차가 굉장히 커지기 때문에, 학습하는 정보를 계속 이어나가기 힘들다.
==> 이를 해결하는 네트워크 구조 **Gated RNNs: LSTM/GRU**

Long short-term memory: LSTM

출처:http://colah.github.io/posts/2015-08-Understanding-LSTMs/

앞서 제시된 RNN의 긴 의존 기간의 문제를 피하기 위해 설계되었음.

  • hidden state 만이 아니라 cell state 라는 역할이 있으며 Forget gate, Input gate, Output gate를 통해 계산이 이루어짐.
  • Gradient flow를 제어할 수 있는 "밸브" 역할을 수행함.
  • State space의 입력($x$), 상태($h$), 출력($y$) 구조는 동일함.
  • 4개의 Unit을 가지고 있음.

1) Forget gate
2) Input gate
3) Output gate
4) Cell

Gate의 이름에서 알 수 있듯이 어떤 정보를 잊을지 기억할지를 선택해 long term과 short term에 대한 정보를 고려함.

Cell state

  • Hidden state와 마찬가지로 이전 시점의 cell state를 다음 시점으로 넘겨줌.
  • Cell state의 주 역할은 gate들과 함께 작용해 정보를 선택적으로 활용
  • Cell state의 업데이트는 각 gate의 결과를 더함으로서 진행됨.

Gate

  • 1), 3), 4)이 gate라고 할 수 있음.
  • 세 개의 gate 모두 활성화 함수로 시그모이드 적용 => $\sigma$
  • gate는 cell state와 함께 정보를 선택적으로 활용할 수 있도록 함.

1) Forget gate layer

  • 과거 정보를 얼마나 잊을 것인지/기억할 것인지 결정하는 단계
  • 전 시점의 hidden state $h$와 현재 입력 $x$에 대해 연산을 진행하고, $\sigma$함수 사용 함.
  • 이 값이 0에 가까울 수록 정보를 잊은 것이며, 1에 가까울 수록 정보를 기억하는 것임.
  • 연산의 결과인 $f_t$는 과거 정보에 관해 얼마나 잊었는지, 기억하는지를 가지고 있는 값임.

2) Input gate layer

  • 새로운 정보 중 어떤것을 cell state에 저장할 것인지?
  • forget gate 와 동일한 기능으로 $i_t$는 현재의 정보를 기억할 것인지/기억하지 않을 것인지를 결정함.
  • 이후 $h_{t-1}$ $x_t$는 tanh 함수에 들어가 출력값으로 반환되어 hadamarad product()가 되고, 새로운 후보 값인 $C_t$를 만들어 cell state에 더해짐.

3) Cell state update

  • 과거 state인 $C_{t-1}$을 업데이트 해서 새로운 cell state인 $C_t$를 만듦. 이때 forget gate에서 잊어야 하는 이전 상태의 정보를 잊어버리고, 현재의 input값의 반영 값을 포함해서 업데이트 해줌.

4) Output gate layer

  • 시그모이드 레이어에 $x_{t}$와 $h_{t-1}$이 들어가 0~1사이의 값을 출력하고, 이 값은 cell state의 어느 부분을 output으로 내보낼 지 결정함. 이후 cell state가 tanh에 들어가 나온 출력값과 output gate에서 나온 값이 곱해져 $h_t$가 출력됨. 이 $h_t$는 출력값으로 나가가기도 하며, 다음 state의 input으로 들어감.

Gated Recurrent Unit: GRU

  • GRU는 기존 LSTM의 구조를 조금 더 간단하게 개선한 모델임.
  • LSTM보다 학습 속도가 빠르지만, 여러 평가에서 LSTM과 비슷한 성능을 보인다고 알려져 있음.
  • 데이터 양이 적을 때는 매개변수의 양이 적은 GRU가 더 좋으며, 데이터 양이 많다면 LSTM이 더 좋다고 알려져 있음.
  • LSTM의 forget gate, input gate, output gate 를 reset gate, update gate 2개의 gate만을 사용함. 그리고 cell state, hidden state를 하나의 hidden state로 표현함.

1) Reset gate ($r(t)$) : 이전 상태를 얼마나 반영할 지

  • 이전 시점의 hidden state, 현 시점의 입력값을 sigmoid에 통과해 이전 hidden state값을 얼마나 활용할 것인지 결정 식(2).
  • (3)식에 다시 활용하여 이전 time point의 hidden state에 reset gate를 곱하여 사용함.

2) Update gate ($z(t)$) : 과거와 현재의 정보를 각각 얼마나 반영할 지에 대한 비율 ==> 삭제 게이트와 입력 게이트의 역할을 수행함.

  • 과거와 현재의 정보를 각각 얼마나 반영할 지에 대한 비율을 구함.
  • 식 (1)을 통한 결과인 $z$는 현재 정보를 얼마나 사용할 지를 반영, $1-z$는 과거 정보를 얼마나 사용할 지에 대해 반영함. 전자는 LSTM의 Input gate, 이후를 forget gate라고 생각할 수 있음.
  • 최종적으로는 (4) 식을 통해 현 시점의 hidden state 값을 구할 수 있음.
  • GRU 셀은 output gate가 없어 hidden vector $h_t$가 타임 스텝마다 출력되고, 이전 상태의 $h_{t-1}$의 어느 부분이 출력될 지 제어하는 gate controller인 $r_t$가 있는 것임

Ref; Augustin, Maximilian, et al. "Diffusion visual counterfactual explanations." arXiv preprint arXiv:2210.11841 (2022).

 

 

1. Introduction

 

 

 The lack of transparency in black-box models like neural networks is hindering the widespread use of machine learning and image classification. Humans want to understand and control the learning algorithm to ensure that it has captured the underlying concepts of the classes. This paper focuses on model-agnostic explanations that can be applied to any image classifier. Various methods have been proposed for generating counterfactual explanations, which construct a concrete input with a different classification to test if the model has learned the correct features. These explanations can be used for debugging existing machine learning models.

 

 The main reason why visual counterfactual explanations (VCEs) for image classification are not widely used is that generating VCEs and adversarial examples are closely related tasks, and even slight changes to an image can change the classifier's prediction. Adversarially robust models have been shown to produce semantically meaningful VCEs, but they can only generate VCEs for robust models, which are not competitive in terms of prediction accuracy. Other approaches have restrictions or limitations. This paper presents Diffusion Visual Counterfactual Explanations (DVCEs), which overcome previous challenges and can generate VCEs for arbitrary ImageNet classifiers. The authors use a combination of distance regularization and starting point of the diffusion process, together with an adaptive reparameterization, and a cone regularization of the gradient of the classifier via an adversarially robust model to produce realistic images of the target class with high confidence by the classifier. Their approach achieves higher realism and has more meaningful features compared to recent methods.

 

2. Diffusion models

 

 

 Diffusion models are generative models that transform the data distribution to a prior distribution through a forward diffusion process, and then transform it back to the data distribution through a reverse diffusion process. The reverse diffusion process was studied more closely in a research paper. In the discrete-time setting, a Markov chain is defined by adding noise to the data point at each timestep.

 

For the detailed process of Diffusion, we recommend referencing the corresponding blog post:

https://lilianweng.github.io/posts/2021-07-11-diffusion-models/

 

Loss of Diffusion model is defined as:

 

 

 

2.1 Class conditional sampling

 

 

 

 Diffusion models are generative models that consist of a forward and reverse diffusion process, with the reverse process transforming the prior distribution back to the data distribution. For the experiments, the class-unconditional diffusion model is used, and a noise-aware classifier is introduced to explain any classifier. The reverse process transitions are of the form pθ,φ(xt−1|xt, y) = Z pθ(xt−1|xt) pφ(y|xt, t), and the noise-free image x0 is estimated using the mapping fdn. To sample from pθ,φ(xt−1|xt, y) efficiently, transition kernels are approximated with slightly shifted versions of pθ(xt−1|xt). The transition kernels are given by pθ,φ(xt−1|xt, y) = N (µt, Σθ(xt, t)), and µt is obtained using the noise-aware classifier.

 

Transition kernels are defined as follow:

 

 

3. Diffusion Visual Counterfactual Explanations

 

 

 Given a classifier pφ(y|·) and a target class y, a Visual Counterfactual Explanation (VCE) x for an input xˆ should meet the following criteria: i) validity: the VCE x should be classified by pφ(y|·) as the desired target class y with high predicted probability, ii) realism: the VCE should be as close as possible to a natural image, iii) minimality/closeness: the difference between the VCE x and the original image xˆ should be the minimal semantic modification necessary to change the class, while being valid and realistic. The paper introduces a new approach called Diffusion Visual Counterfactual Explanations (DVCEs) that work for any classifier and are more realistic due to better generative properties of diffusion model

 

3.1 Adaptive Parameterization

 

 To generate the DVCE of the original image xˆ, the diffusion process needs to be conditioned on xˆ to ensure that the generated image x is both realistic and close to xˆ. To achieve this, the mean of the transition kernel is modified to include the gradient of the log-likelihood of the noise-aware classifier pφ. 

However, even with this modified approach, it can still be difficult to generate semantically meaningful changes close to xˆ. To address this issue, the starting point of the diffusion process is varied and it is observed that starting from step T/2 of the forward diffusion process, together with an adaptive parameterization and using the L1-distance as the distance metric, provides sparse but semantically meaningful changes. In the experiments, T is set to 200.



3.2 Cone projection for classifier guidance

 

 

 

 In summary, to generate DVCEs that can be applied to any image classifier, regardless of whether it is adversarially robust or not, we suggest projecting the gradient of an adversarially robust classifier with parameters ψ onto a cone centered at the gradient of the non robust classifier, using the denoising function fdn to preprocess the image. This cone projection ensures that the gradient of the robust classifier is always an ascent direction for the probability of the non-robust classifier, which we would like to maximize. The cone projection is a form of regularization that guides the diffusion process to generate semantically meaningful changes to the image.

 

 

 

 

3.3 final scheme for Diffusion Visual Counterfactuals

 

 

  solution for a non-adversarially robust classifier pφ(y|·) by replacing the update step with:

 

 

 

4. Experiments

 

 

4.1. Comparison of methods for VCE Generation

 

 Assess the effectiveness of the DVCE by comparing it to existing works in Sec. 4.1. Then, in Sec. 4.2,  demonstrate how DVCEs can be employed to interpret differences between classifiers by comparing their performance across various state-of-the-art ImageNet models.

 

 

 DVCEs are the only type of VCEs that fulfill all desired properties. BD, on the other hand, tends to create images that are significantly different from the original, as seen in the examples of leopard and tiger, and frequently produces artifacts in images such as pizza, potpie, timber wolf, white wolf, and alp. Although l1.5 SVCEs can produce images with lower quality and artifacts, they still offer some benefits, as seen with examples like white wolf, volcano, and night snake.

 

 

 

 

 Quantitative analysis using FID scores is challenging for VCEs because methods that do not alter the original image have low FID scores. Therefore, a cross-over evaluation scheme was developed to partition classes into two sets and only analyze cross-over VCEs. The results in Tab. 1 show that DVCEs are less close to the target class than l1.5-SVCEs but are more realistic and have similar validity. In contrast, BDVCEs perform the worst in all categories. A user study with 20 participants also confirms that DVCEs generate more meaningful features in the target classes than l1.5-SVCEs and BDVCEs. While the quantitative evaluation may suggest otherwise, users considered the images generated by DVCEs to be more realistic regardless of whether they show the target class or not.

 

 

 

 

4.2. model comparison

 

 Non-robust ImageNet models were used in the experiments, including Swin-TF, ConvNeXt, and Noisy-Student EfficientNet. DVCEs were generated using the cone projection method with a 30◦ angle, with a robust model from the previous section. The resulting DVCEs provide insight into the most important features of each model and class, with the roof and tower structures being the most prominent for stupa and church classes. In addition, DVCEs of different robust models, including MNR-RN50, MNR-XCiT, and MNR-DeiT, were generated and evaluated, demonstrating the generative properties of adversarially robust models, particularly robust transformers. 

 

 

 

 

5. Limitations

 

 For future research, it would be interesting to explore alternative "denoising" procedures for the gradient of non-robust models, as training robust models can be challenging. However, it is important to note that approximating reverse transitions using shifted normal distributions can be difficult to verify, especially when adding a classifier and other terms, which can affect the diffusion process outcome.

 Evaluating VCEs quantitatively is challenging, as existing metrics such as FID and IM1, IM2 rely on well-trained (V)AEs for every class and generating meaningful changes, in addition to realistic images and high confidence. Developing new metrics for VCEs is necessary, especially for datasets with high-resolution images and many classes. While DVCEs and VCEs in general help uncover biases in classifiers and have a positive impact, there is also the potential for unintended misuse as with any conditional generative model.

 

 

References

 

[1] Maximilian Augustin, Alexander Meinke, and Matthias Hein. Adversarial robustness on inand out-distribution improves explainability. In ECCV, 2020.

[2] Omri Avrahami, Dani Lischinski, and Ohad Fried. Blended diffusion for text-driven editing of natural images. In CVPR, 2022.

[3] Sebastian Bach, Alexander Binder, Frederick Klauschen Gregoire Montavon, Klaus-Robert Müller, and Wojciech Samek. On pixel-wise explanations for non-linear classifier decisions by layer-wise relevance propagation. PLoS One, 2015.

[4] David Baehrens, Timon Schroeter, Stefan Harmeling, Motoaki Kawanabe, Katja Hansen, and Klaus-Robert Müller. How to explain individual classification decisions. JMLR, 2010.

[5] Yutong Bai, Jieru Mei, Alan Yuille, and Cihang Xie. Are transformers more robust than cnns? In NeurIPS, 2021.

[6] Solon Barocas, Andrew D. Selbst, and Manish Raghavan. The hidden assumptions behind counterfactual explanations and principal reasons. In FAT, 2020.

[7] Valentyn Boreiko, Maximilian Augustin, Francesco Croce, Philipp Berens, and Matthias Hein. Sparse visual counterfactual explanations in image space. In GCPR, 2022.

[8] Chun-Hao Chang, Elliot Creager, Anna Goldenberg, and David Duvenaud. Explaining image classifiers by counterfactual generation. In ICLR, 2019.

[9] Jooyoung Choi, Sungwon Kim, Yonghyun Jeong, Youngjune Gwon, and Sungroh Yoon. Ilvr: Conditioning method for denoising diffusion probabilistic models. In ICCV, 2021.

[10] EU Commission. Regulation for laying down harmonised rules on AI. European Commission, 2021.

[11] Francesco Croce and Matthias Hein. Adversarial robustness against multiple lp-threat models at the price of one and how to quickly fine-tune robust models to another threat model. In ICML, 2022.

[12] Edoardo Debenedetti. Adversarially robust vision transformers. Master’s thesis, Swiss Federal Institue of Technology, Lausanne (EPFL), 2022.

[13] Jia Deng, Wei Dong, Richard Socher, Li-Jia Li, Kai Li, and Li Fei-Fei. Imagenet: a large-scale hierarchical image database. In CVPR, 2009. License: No license specified.

[14] Prafulla Dhariwal and Alex Nichol. Diffusion models beat gans on image synthesis. In NeurIPS, 2021.

[15] Amit Dhurandhar, Pin-Yu Chen, Ronny Luss, Chun-Chen Tu, Paishun Ting, Karthikeyan Shanmugam, and Payel Das. Explanations based on the missing: Towards contrastive explanations with pertinent negatives. In NeurIPS, 2018. [16] Logan Engstrom, Andrew Ilyas, Hadi Salman, Shibani Santurkar, and Dimitris Tsipras. Robustness (python library), 2019. License: MIT.

[17] Christian Etmann, Sebastian Lunz, Peter Maass, and Carola-Bibiane Schönlieb. On the connection between adversarial robustness and saliency map interpretability. In ICML, 2019.

[18] Yash Goyal, Ziyan Wu, Jan Ernst, Dhruv Batra, Devi Parikh, and Stefan Lee. Counterfactual visual explanations. In ICML, 2019.

[19] Lisa Anne Hendricks, Zeynep Akata, Marcus Rohrbach, Jeff Donahue, Bernt Schiele, and Trevor Darrell. Generating visual explanations. In ECCV, 2016.

[20] Lisa Anne Hendricks, Ronghang Hu, Trevor Darrell, and Zeynep Akata. Grounding visual explanations. In ECCV, 2018.

[21] Martin Heusel, Hubert Ramsauer, Thomas Unterthiner, Bernhard Nessler, and Sepp Hochreiter. Gans trained by a two time-scale update rule converge to a local nash equilibrium. In NeurIPS, 2017.

[22] Jonathan Ho and Tim Salimans. Classifier-free diffusion guidance. In NeurIPS Workshop, 2021.

[23] Pieter Abbeel Jonathan Ho, Ajay Jain. Denoising diffusion probabilistic models. In NeurIPS, 2020.

[24] Tero Karras, Samuli Laine, Miika Aittala, Janne Hellsten, Jaakko Lehtinen, and Timo Aila. Analyzing and improving the image quality of StyleGAN. In CVPR, 2020.

[25] Saeed Khorram and Li Fuxin. Cycle-consistent counterfactuals by latent transformations. In CVPR, 2022.

[26] Oran Lang, Yossi Gandelsman, Michal Yarom, Yoav Wald, Gal Elidan, Avinatan Hassidim, William T. Freeman, Phillip Isola, Amir Globerson, Michal Irani, and Inbar Mosseri. Explaining in style: Training a gan to explain a classifier in stylespace. In ICCV, 2021.

[27] Xihui Liu, Dong Huk Park, Samaneh Azadi, Gong Zhang, Arman Chopikyan, Yuxiao Hu, Humphrey Shi, Anna Rohrbach, and Trevor Darrell. More control for free! image synthesis with semantic diffusion guidance. In WACV, 2023. [28] Ze Liu, Fand Yutong Lin, Yue Cao, Han Hu, Yixuan Wei, Zheng Zhang, Stephen Lin, and Baining Guo. Swin transformer: Hierarchical vision transformer using shifted windows. In ICCV, 2021.

[29] Zhuang Liu, Hanzi Mao, Chao-Yuan Wu, Christoph Feichtenhofer, Trevor Darrell, and Saining Xie. A convnet for the 2020s. In CVPR, 2022.

[30] Arnaud Looveren and Janis Klaise. Interpretable counterfactual explanations guided by prototypes. In ECML, 2021. [31] Scott M. Lundberg and Su-In Lee. A unified approach to interpreting model predictions. In NeurIPS, 2017.

[32] Calvin Luo. Understanding diffusion models: A unified perspective. arXiv preprint, arXiv:2208.11970, 2022.

[33] George A. Miller. Wordnet: A lexical database for english. Commun. ACM, 1995.

[34] Tim Miller. Explanation in artificial intelligence: Insights from the social sciences. Artificial Intelligence, 2019.

[35] Ramaravind K. Mothilal, Amit Sharma, and Chenhao Tan. Explaining machine learning classifiers through diverse counterfactual explanations. In FAccT, 2020.

[36] Alex Nichol and Prafulla Dhariwal. Improved denoising diffusion probabilistic models. In ICML, 2021.

[37] Alex Nichol, Prafulla Dhariwal, Aditya Ramesh, Pranav Shyam, Pamela Mishkin, Bob McGrew, Ilya Sutskever, and Mark Chen. Glide: Towards photorealistic image generation and editing with text-guided diffusion models. In ICML, 2022. [38] Nick Pawlowski, Daniel Coelho de Castro, and Ben Glocker. Deep structural causal models for tractable counterfactual inference. In NeurIPS, 2020.

[39] Marco Tulio Ribeiro, Sameer Singh, and Carlos Guestrin. "why should i trust you?": Explaining the predictions of any classifier. In KDD, 2016.

[40] Olaf Ronneberger, Philipp Fischer, and Thomas Brox. U-net: Convolutional networks for biomedical image segmentation. In MICCAI, 2015.

[41] Olga Russakovsky, Jia Deng, Hao Su, Jonathan Krause, Sanjeev Satheesh, Sean Ma, Zhiheng Huang, Andrej Karpathy, Aditya Khosla, Michael Bernstein, Alexander C. Berg, and Li Fei-Fei. Imagenet large scale visual recognition challenge. IJCV, 2015. License: No license specified.

[42] Pouya Samangouei, Ardavan Saeedi, Liam Nakagawa, and Nathan Silberman. Explaingan: Model explanation via decision boundary crossing transformations. In ECCV, 2018.

[43] Shibani Santurkar, Dimitris Tsipras, Brandon Tran, Andrew Ilyas, Logan Engstrom, and Aleksander Madry. Image synthesis with a single (robust) classifier. In NeurIPS, 2019.

[44] Lisa Schut, Oscar Key, Rory McGrath, Luca Costabello, Bogdan Sacaleanu, Medb Corcoran, and Yarin Gal. Generating interpretable counterfactual explanations by implicit minimisation of epistemic and aleatoric uncertainties. In AISTATS, 2021.

[45] Kathryn Schutte, Olivier Moindrot, Paul Hérent, Jean-Baptiste Schiratti, and Simon Jégou. Using stylegan for visual interpretability of deep learning models on medical images. In NeurIPS Workshop, 2020. 12

[46] Ramprasaath R. Selvaraju, Michael Cogswell, Abhishek Das, Ramakrishna Vedantam, Devi Parikh, and Dhruv Batra. Grad-cam: Visual explanations from deep networks via gradient-based localization. IJCV, 2019.

[47] Karen Simonyan, Andrea Vedaldi, and Andrew Zisserman. Deep inside convolutional networks: Visualising image classification models and saliency maps. In ICLR, 2014.

[48] Jascha Sohl-Dickstein, Eric Weiss, Niru Maheswaranathan, and Surya Ganguli. Deep unsupervised learning using nonequilibrium thermodynamics. In ICML, 2015.

[49] Jiaming Song, Chenlin Meng, and Stefano Ermon. Denoising diffusion implicit models. In ICLR, 2021.

[50] Yang Song, Jascha Sohl-Dickstein, Diederik P Kingma, Abhishek Kumar, Stefano Ermon, and Ben Poole. Score-based generative modeling through stochastic differential equations. In ICLR, 2021.

[51] Suraj Srinivas and François Fleuret. Full-gradient representation for neural network visualization. In NeurIPS, 2019. [52] Christian Szegedy, Wojciech Zaremba, Ilya Sutskever, Joan Bruna, Dumitru Erhan, Ian Goodfellow, and Rob Fergus. Intriguing properties of neural networks. In ICLR, 2014.

[53] Mingxing Tan and Quoc Le. Efficientnet: Rethinking model scaling for convolutional neural networks. In ICML, 2019. [54] Sahil Verma, John P. Dickerson, and Keegan Hines. Counterfactual explanations for machine learning: A review. arXiv preprint, arXiv:2010.10596, 2020.

[55] Sandra Wachter, Brent Mittelstadt, and Chris Russell. Counterfactual explanations without opening the black box: Automated decisions and the GDPR. Harvard Journal of Law & Technology, 2018.

[56] Zifan Wang, Haofan Wang, Shakul Ramkumar, Matt Fredrikson, Piotr Mardziel, and Anupam Datta. Smoothed geometry for robust attribution. In NeurIPS, 2020.

[57] Qizhe Xie, Minh-Thang Luong, Eduard Hovy, and Quoc V. Le. Self-training with noisy student improves imagenet classification. In CVPR, 2020.

[58] Richard Zhang, Phillip Isola, Alexei A Efros, Eli Shechtman, and Oliver Wang. The unreasonable effectiveness of deep features as a perceptual metric. In CVPR, 2018

 

안녕하세요

호떡

유튜브에서 설명했던 GAN DCGAN에 대해 설명하도록 하겠습니다.

 

 

 

 

---------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

1. Generative adversarial Networks(GAN) 이란 ? 

 

 

Gan을 제안했던 Ian Goodfellow는 GAN을 경찰과 위조지폐범 사이의 게임에 비유하여 설명하는데요.

위의 그림의 예시로 설명하자면

Generator(이미지 생성모델)는 노이즈 벡터 z로부터 Fake money(Fake image)를 생성하는 위조지폐범이라고 할 수 있고 Discriminator(판별 모델)는 Fake money(Fake image)와 Real money(Origin image)를 판별하는 경찰이라고 할 수 있습니다.

 

 

 

 

실제 네트워크에 적용해보면 아래와 같은 그림이라고 할 수 있죠.

 

Hamed Alqahtani. 2019. An Analysis Of Evaluation Metric Of GANs

 

 

 

 

이때 Discriminator Network는 실제이미지와 가짜 이미지를 받아 0~1 사이의 값을 내놓게 되는데,

1에 가까울 수록 Real image로 판단함을 뜻하며

0에 가까울 수록 Fake image로 판별하는 것을 뜻합니다. 

 

 

 

 

 

 

 

즉 Discriminator는 일반적인 이미지 분류 모델로 Label을 가지고 학습하는 지도학습 방식이며,

Generator는 noise vector z로부터 origin image data(training data)의 확률분포를 학습해 이미지를 생성하는 비지도 학습 방식이라고 할 수 있습니다.

 

 

 

 

 

여기서!!!!!!!!!!!!!!!!!!!!!!!!

Generator가 Origin 학습 데이터의 분포에 학습한 다는 것은 어떤 의미일 까요?

이에 대해 설명하기 전에, 기초적인 확률 분포에 대한 개념을 짚고 넘어가도록 하겠습니다.

 

 

 

 

 

 

예를들어, 주사위를 6번 던졌고 주사위 눈(1,2,3,5)가 한번씩, 주사위 눈 6이 2번 나왔다고 하면

아래와 같이 표현할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

1,2,3,5(Random variable)이 1/6(Probability mass function)의 확률, 6(Random variable)이 2/6(Probability mass function)의 확률이라고 할 수 있고 오른쪽 그림과 같이 확률 분포 함수를 시각화 할 수 있습니다.

이 예시에서는 경우의 수가 6이지만,

차원(Random variable)을 늘려 이미지의 차원을 학습하면 어떨까요? 이미지의 확률분포를 예측할 수 있을 까요?

 

 

 

 

이미지 데이터는 여러가지 특징을 가진 다차원 특징공간의 한 점으로 표현되죠. 위의 주사위 예시에서는 단순한 1차원 특징공간에서 표현된 것이구요.

따라서 사람의 얼굴 이미지를 예시로 들자면, 사람의 얼굴의 통계적인 평균치가 존재할 수 있게 됩니다.

눈의 길이, 코의 길이, 눈썹의 두께, 등등 얼굴상에 존재하는 특징은 수치적으로 표현될 수 있고 사람의 얼굴에는 통계적인 평균치가 존재할 수 있게 되는 것이죠.

 

 

 

 

이미지에서의 다양한 특징들이 각각의 확률 변수가 되게 되고, 예시로 아래와 같이 다변수 확률 분포로 시각화 할 수 있습니다. 

 

 

 

 

출처:https://www.youtube.com/watch?v=AVvlDmhHgC4&t=2020s

 

 

 

 

만약 우리가 Hidden layer의 노드의 개수를 2로 설정했다면,

얼굴 이미지의 특징들이 Catch가 될텐데

이때 코의 길이와 눈의 모양이 Catch될 수 있습니다.

이렇게 인간의 얼굴에 대한 특징을 다차원공간의 확률 분포로 표현 할 수 있습니다.

 

 

 

 

Generator는 이러한 확률분포(Training data)를 학습하게 되는 것이죠.

 

 

 

 

 

- Generative  Model  (G)

 

 

Generative model은 위에서 설명한 것과 같이 이미지의 확률 분포를 학습해 실제로 존재하지 않지만 있을 법한 이미지를 생성하는 것을 목표로 합니다.

 

 

 

 

 

출처:https://www.youtube.com/watch?v=AVvlDmhHgC4&t=2020s

 

 

 

 

 

만약 우리의 모델 G 가 Train data의 확률분포를 잘 학습했다면, 확률값이 높은 분포에서 샘플링 하여 위와 같은 사람에가까운 이미지를 생성하는 것이고, 확률 값이 낮은 곳에서 샘플링 하게 되면 어색한 이미지를 만들게 되는 것이죠. 

 

 

 

 

확률이 높은 곳에서부터 노이즈 벡터를 섞어가며 샘플링을 한다면 다양한 형태로 그럴싸한 이미지를 만들어내게 됩니다.

 

 

 

 

 

 

 

 

 

위의 그림은 GAN 논문에서 발췌해온 그림인데요

검정색은 Origin data(Train data)에 대한 확률 분포

초록색은 Generate model의 확률분포

파란색은 Discriminator가 origin image 와 generate 이미지를 판별한 label을 대략적으로 시각화 한 것입니다.

 

 

 

 

시간이 지날 수록 G모델은 원래 Origin Data의 이미지의 확률분포를 학습해 유사해지고, D모델은 그에 맞춰 Origin data와 Generated data 를 구분 못하는 것을 볼 수 있죠.

 

 

 

 

 

그렇다면 어떻게 !!!!!!!!!!!!!!!!!!!!!!!!!!!!

시간이 지날 수록 Generate Model이 Origin data의 확률분포와 유사해 지는 것 일까요????

 

 

 

 

 

 

이를 설명하기 전에, GAN의 Object function을 설명하도록 하겠습니다.

 

 

 

 

 

 

 

 

 

 

object function은 D와 G의 Minmax 함수로 정의할 수 있습니다.

차근차근 식을 뜯어보도록 하죠..

 

 

 

 

먼저 D의 입장에서 식을 보도록 하겠습니다.

 

 

 

 

D는 경찰의 역할을 하죠. 즉 이미지가 들어왔을 때 가짜인지 진짜인지 잘 구분해야 합니다.

진짜같다면 1에 가까운 값을,

가짜같다면 0에 가까운 값을 내놓아야 하죠.

 

 

 

 

실제 데이터 X가 들어왔을 때 큰 값(1)을 내뱉고 (왼쪽 Term이 커짐)

가짜 데이터 G(z)가 들어왔을 때 작은 값 (오른쪽 Term이 커짐)을 내뱉어야 하기 때문에

결론적으로 전체 식이 Maximize되어야 합니다.

 

 

 

 

그럼 G의 입장에서 식을 보도록 하죠.

 

 

G는 단순하게,

D가 답을 못맞추는 것을 목표로 합니다.

 

 

 

실제데이터(x)가 들어갔을 때 Fake 라고 판별하고(0),

내가 만든 데이터(G(z))가 들어갔을 때 Real이라고 판별해야(1) 하죠.

 

 

 

 

그래서 왼쪽 Term은 0에 가깝게(작아짐),

오른쪽 Term은 D(G(z))값이 1에 가깝게(결론적으로 오른쪽 Term은 작아짐) 나와야 하는 것이죠.

전체식이 Minimize되는 것이죠!!!!!!!!!!!!!!!!!!!!!

 

 

 

 

 

 

 

 

 

그래서 논문에 나와있는 학습 방식을 보면,

D는 위의 식대로,

G는 앞의 Term인 logD(x(i))가 의미 없기 때문에(g와 관련한 term이 아니라서 상수취급됨) 뒤에 term만 남긴채로 학습이 진행되는 것을 볼 수 있죠.

 

 

 

 

 

 

 

그럼!!! Object Function도 알아봤으니 Pg = Pdata로 학습이 될 수 있는 이유를 알아봅시다.

이에 관련해 논문에서도 수식적으로 정리가 되어있는데요.

조금 더 풀어서 설명해보도록 하겠습니다.

 

 

 

 

 

 

 

 

우선 D의 optimal point가 Pdata/(Pdata+Px)임을 증명해야 합니다. 

 

 

 

 

 

 

 

 

 

 

object function 은 연속 확률 분포에서 기댓값의 정의에 따라 식을 변환할 수 있고, G(z)는 노이즈 벡터로부터 x와 유사한 이미지를 만들기 때문에 x로 매핑 가능하고

최종적인 식이 alog(y) + blog(1-y)로 치환되는데,

이 식을 미분하면 극댓값을 얻을 수 있게 됩니다.

a/a+b에서 극댓값을 얻기 때문에

Dg(x) = Pdata(x)/(Pdata(x)+Pg(x))의 optimal point 로 수렴하게 됩니다.

 

 

 

그럼 Pg=Pdata가 되는 이유를 증명하도록 하겠습니다.

 

 

 

 

 

object function을 위에서 정의한 Dg(x)값에 따라 식을 변환할 수 있는데,

앞의 두 Term에 2를 곱하고 Log4를 빼줍니다.(이 과정은 정의의 편의성을 위해)

그럼 KL divergence라는 두 데이터의 확률분포의 차이를 기술하는 metric으로 치환하게 되고,

이를 Jensen–Shannon divergence라는 Distance metric으로 치환할 수 있습니다. 

두 확률 분포간의 유사성을 측정하는 것으로, 우리는 결론적으로 이 식을 Minimize해야 하기 때문에

Pdata=Pg (즉,  JSD=0)일 때 최솟 값을 가지게 됩니다.

 

 

 

 

 

 

 

 

 

위의 그림의 오른쪽 노란색 박스는 실제 데이터(Origin data, Train data)이며,

노란색 박스를 제외한 그림들이 Gan이 생성한 이미지입니다.

 

 

 

실제 데이터를 단순히 외운 것이 아니라 그럴 듯한 이미지를 생성한 것을 볼 수 있죠.

 

 

 

 

 

 

그렇지만!!!!!!!!!!!!!!!

 

이때의 Gan은 구조가 다소 불안정하며,

Neural Net으로 학습이 진행되었기 때문에 Black Box(중간 과정을 볼 수가 없다 ㅠㅠ)가 지니는 한계점을 가지게 됩니다.

 

 

 

이 당시 학계의 주요 고민거리가 Gan의 안정화 였다고 하네요..

그래서 Facebook 에서 안정화된 Convolution을 사용하는 Deep Convolutional Generative Adversarial Network(DCGAN)을 제안하게 됩니다.

 

 

 

DCGAN이 Contribute하는 점들을 보자면,

 

 

1. D(Discriminator)모델이 일반적인 이미지 분류에서 다른 비지도 알고리즘과 비교하였을 때 성능이 좋으며,

2. DCGAN들이 학습한 filter를 Viz할 수 있고, Filter가 특정 Object를 생성하는 역할을 한다는 것을 알아내게 됩니다.

3. 또한 벡터산술연산이 가능하다는 성질을 알아내었고,

4. 대부분의 상황에서 안정적으로 학습이 가능하다고 합니다.

 

 

 

https://arxiv.org/pdf/1511.06434v2.pdf

 

 

 

 

 

위의 그림이 Generator의 구조인데요, 

NN을 사용했던 기존 구조와는 달리 Convolution을 사용해 구성한 것을 알 수 있습니다.

 

 

 

 

이때 Convolution은 이미지의 사이즈를 작게하는 metric인데,

Generator는 latent vector z로부터 이미지를 생성하는 것이잖아요?

이 문제를 Fractional convolution을 통해 해결했다고 합니다.

 

 

 

Fractional covolution은 Transposed Convolution으로 정기적인 Convolution을 수행하며 공간의 변화를 되돌립니다.

일반적인 Convolution의 연산

위의 그림이 일반적인  Convolution의 연산 과정이라고 할 수 있는데요,

Transposed Convolution은 

Transposed convolution

 kernel matrix를 Transpose해주어 원래의 input형태로 되돌릴 수 있습니다.

 

DCGAN은 이와 같은 구조를 적용해 이미지의 사이즈를 키울 수 있었 던 것이죠.

 

 

 

 

 

그리고 몇가지 metric을 더 추가하는데요.

D Network에는 Strided Convolution을, G Network에는 Fractional-strided convolution 을 추가하고

두개의 네트워크에 Batchnormalization을 적용하여 학습이 더 빠르고 안정되게 이루어질 수 있도록 하였습니다.

그리고 원래의 Hidden Layer를 다 지우고,

G에는 Relu activation, 마지막 Output에는 Tanh,

D에는 LeakyRelu를 적용하고 마지막 Output에는 Sigmoid를 사용하였습니다.

 

 

이렇게 모든 과정을 노가다(?)를 구현했다고 하고, Sensitive하게 왜 잘 되는지는 설명이 되어있지 않다고 합니다. 즉 결과를 통해 얻어낸 최적 파라메터 값들인 것이죠.

 

 

 

 

 

 

 

기존 NN은 Blackbox모델이기 때문에 왜 잘 되는지 알 수 없었다면,

DCGAN은 필터를 뽑아냄으로써 필터가 특정 Object를 잡아내고 있는 것을 확인 할 수 있었죠.

 

 

 

 

 

또한 위의 그림과 같이

벡터산술 연산이 가능합니다.

(이 또한 의도 한 것이 아닌 네트워크를 만들고 보니 가능했다고 하네요..)

 

 

 

 

latent vector z에서 안경을 쓰는 남자들을 그리게 하는 입력값을 모아 평균치를 구하고,

마찬가지로 안경을 안쓴 남자와 안경을 안쓴 여자에 대해 z값의 평균치를 구해 빼고 더해주면

새로운 입력값(산술 연산된 z)을 다시 네트워크에 넣었을 때 놀랍게도 안경 쓴 여자들 이미지가 나옵니다.

 

 

 

 

 

 

 

 

이 위의 그림이 DCGAN이 생성한 그림입니다.

기존 Gan에 비해 훨씬 실제와 유사한 그림을 생성해 내는 것을 볼 수 있죠

--------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

그럼 GAN과 DCGAN에 대한 포스팅을 마치도록 하겠습니다!

 

 

 

 

 

감사합니다

 

 

 

 

 

 

 

 

 

 

 

 

참고 블로그 및 유튜브

 

[1] https://zzsza.github.io/data/2018/02/23/introduction-convolution/

 

딥러닝에서 사용되는 여러 유형의 Convolution 소개

An Introduction to different Types of Convolutions in Deep Learning을 번역한 글입니다. 개인 공부를 위해 번역해봤으며 이상한 부분은 언제든 알려주세요 :)

zzsza.github.io

[2] https://jaejunyoo.blogspot.com/2017/02/deep-convolutional-gan-dcgan-1.html

[3]https://memesoo99.tistory.com/32p

 

[GAN] DCGAN - 논문 리뷰, Paper Review, 설명 (1)

오늘 다룰 논문은 2016년에 발표된 DCGAN -Unsupervised Representation Learning with Deep Convolutional Generative Adversarial Networks에 대한 리뷰입니다. 논문에 흥미로운 Figure들이 많아 재미있게 읽은 논문입니다. DCGA

memesoo99.tistory.com

[4] https://www.youtube.com/watch?v=odpjk7_tGY0

[5] https://www.youtube.com/watch?v=AVvlDmhHgC4

 

 

+ Recent posts