본문 바로가기

Security/논문리뷰

[논문리뷰] Dropout Attacks

2024 S&P

Dropout Attacks

 

최근 많은 기업과 연구자들이 클라우드 환경에서 신경망 모델을 훈련하고 있다. 즉 모델 소유자가 훈련 과정에 대한 직접적인 제어권을 잃고 있다는 말이다. (이는 다시 말해 훈련 과정이 외부에서 진행되므로, 조작이 발생해도 탐지하기 어렵다는 것) 따라서 본 논문은 해당 클라우드 환경에서 치명적인 dropout 공격을 서술하고 있다.


먼저 드롭 아웃이라는 것은 모델의 과적합을 방지하기 위해서 나온 기법이다. 훈련과정에서 일부 뉴런을 랜덤하게 비활성화 하여 특정 뉴런에 의존하는 것을 방지하게 하는 것을 의미한다.

드롭 아웃 공격은 여기서 아이디어를 얻어 뉴런을 랜덤하게 드랍 하는 것이 아닌, 특정 뉴런을 드랍 시키게 만들어 모델 정확도는 유지되지만, 정밀도와 재현율을 낮추는 것이 목표인 공격이다.


그래서 기존 연구와의 차별점을 비교해보자면, 기존 연구는 모델 성능 전체가 저하되어 피해자가 금방 알아차릴 수 있었지만, 본 연구에서는 모델 정확성은 유지하면서 Precision 또는 Recall만 조작 가능하기 때문에 의의가 있다.


 총 3가지의 다른 dropout 공격으로 이루어져 있고, 첫번째로 소개할 것은, 모델 훈련을 거의 중단시키는 최소 활성화 공격이다.

 신경망은 training set에서 계산된 그래디언트에 의해 가중치가 점진적으로 업데이트 되기 때문에 학습한다. 만약 공격이 모든 그래디언트를 0으로 만들 수 있다면, 네트워크는 분류 작업에 대해 아무것도 배울 수 없으며 무작위 모델을 생성하게 된다. 따라서 최소 활성화 공격은 가장 강한 그래디언트를 드랍 함으로써 공격을 수행한다.

 입력 텐서에서 가장 높은 활성화 값을 가진 노드를 떨어뜨린다면, 해당 가중치는 백 워드 패스에서 업데이트 되지 않는다. 특히, 최소 활성화 공격은 드롭 아웃 레이어의 입력 텐서에서 가장 큰 값을 가진 유닛을 드롭 하는 방식을 선택한다. 이 경우 이전 선형 레이어의 출력 활성화 값이 된다. 드롭 아웃 비율 𝑟이 주어지면 공격자는 입력 유닛을 정렬하고 상위 𝑟의 유닛을 0으로 설정한다. 이렇게 하면 활성화 값이 높은 중요한 뉴런들이 지속적으로 제거되면서 모델의 학습이 저하된다.

 ppt 오른쪽 그림을 보면 회색으로 표시된 뉴런들이 제거된 뉴런들이다. 색상이 진한 뉴런들은 그래디언트가 높은 뉴런들이므로 이 뉴런들이 선택적으로 제거되는 모습이다.

 수도코드를 보자면 먼저, 드롭할 뉴런의 개수를 dropout 비율 r을 기반으로 계산한다. 입력 텐서 I에서 뉴런들을 값이 작은 순서대로 정렬한 후, 가장 큰 값을 가진 뉴런을 우선적으로 드롭한다. 이렇게 하면 모델이 중요한 특징을 학습하는 뉴런을 잃어버려 학습이 어렵게 된다.


 두번째로 샘플 드롭 공격은 특정 타겟 클래스의 뉴런을 선택적으로 드롭 하는 방식이다. 드롭률 r에 따라 뉴런을 드롭 해주고 특정 타겟 클래스의 뉴런이 더 이상 존재하지 않는다면 비 타겟 클래스에서 추가 뉴런을 무작위로 드롭한다.

 아래 그림을 보면 최소 활성화 공격과 달리 클래스에 대한 사전지식을 가지고 있는 상태에서 공격을 시작한다. 따라서 초록색이 공격 클래스라는 지식을 가지고 있는 상태에서 공격을 진행해, 오른쪽 결과를 보시면 초록색 뉴런만 제거된 모습이다.

 해당 샘플 드롭 공격은 단점도 존재하는데, 클래스를 지정해서 공격을 수행하기 때문에 공격할 클래스가 많아진다면 모든 대상의 샘플을 제거할 수 없게 되며, 모델이 남은 샘플들로 통해 정상적인 학습을 할 수 있기 때문이다. 이 경우엔 대상 클래스에 대한 학습 속도를 늦추는 대신, 모델 정확도를 완전히 파괴하는 방식으로 진행된다.

 수도 코드를 살펴보자면 먼저, 타겟 클래스의 샘플이 전체에서 차지하는 비율을 고려하여 드롭할 개수를 설정한다.

타겟 클래스의 샘플이 발견되면, 해당 샘플의 뉴런을 드롭한다. (첫번째 if) 만약 타겟 클래스의 샘플이 부족하면 다른 샘플에서 추가적으로 뉴런을 드롭하여 전체 dropout 비율을 유지한다. (두번째 if)

결과적으로, 타겟 클래스의 샘플이 거의 학습되지 않게 되어, 모델이 그 클래스를 예측하지 못하게 된다.


세번째로 뉴런 분리 공격이다. 해당 공격의 핵심 아이디어는 다음과 같다.

 공격자는 훈련에서 뉴런을 분리하여 특정 클래스의 입력만 볼 수 있게 한다. 이를 통해 분리한 뉴런 그룹에 편향을 만들 수 있다. 이는 이러한 뉴런을 드롭 아웃 레이어에 지속적으로 드롭 함으로써 이루어진다. 결과적으로 이러한 뉴런은 최종 결정에 대해 편향을 기여한다. 또한, 이러한 편향은 일반적으로 훈련된 다른 뉴런들이 올바르게 작동하여 편향을 희석시키기 때문에 공격을 알아차릴 수 없어 미묘하다.

 아래 그림을 보면 원하는 미묘한 편향을 생성하는 데는 소수의 입력 샘플만으로 충분하다. 소수의 선택된 그룹에 속하지 않는 뉴런의 경우, 그 반대로 모든 다른 입력에 대해 학습하고 일반적인 드롭 아웃이 적용된다.

 수도 코드를 살펴보면 split index를 통해 뉴런을 두 그룹으로 나누는 기준점을 설정한 뒤, 타겟 클래스 샘플의 경우, 앞부분 뉴런을 제거하고, 다른 클래스 샘플의 경우 뒷부분 뉴런을 제거한다. 이를 통해 특정 뉴런들이 오직 특정 클래스만 학습하도록 강제할 수 있다.

 여기서 들었던 생각은, 그럼 샘플 드롭 공격이랑 뉴런 분리 공격이랑 무슨 차이야? 라는 것..

두 방식의 차이점은 샘플 드롭 공격과 뉴런 분리 공격 모두 실제 라벨이 필요하지만, 뉴런 분리 공격은 단순히 모델의 클래스 정확도를 파괴하는 것 외에도 다른 목표를 달성하는 데 사용할 수 있다는 것이다. 모델이 분리된 뉴런을 업데이트하는 빈도를 조절함으로써 모델의 목표 클래스 정확도를 공격하거나 재현율을 공격할 수 있다. 궁극적으로 이 공격은 샘플 드롭 공격보다 더 정교하며 다양한 목표를 달성하도록 구성된다.


 뉴런 분리 공격의 연장선으로 블라인드 뉴런 분리 공격이다.

 뉴런 분리 공격이 라벨 정보가 필요했다면 해당 공격은 사전정보 없이 클러스터링 기법을 통해 유사한 샘플을 분류하고 공격을 수행할 수 있다. 주요 아이디어는 입력 텐서에 대한 클러스터링 알고리즘을 실행하고 일부 클러스터 크기가 임계 값보다 클 때 원 샷 뉴런 분리 공격을 적용하는 것이다. 공격을 한 번만 수행하는 이유는 두가지가 있다. 첫번째로 클러스터의 입력 수가 편향을 만들기에 충분하고, 두번째로 실제 레이블이 없기 때문에 배치 간에 동일한 클래스의 클러스터를 인식할 수 없다. 즉 한 배치 내에서 공격을 완료해야 한다.

 해당 공격의 주요 한계는 공격자도 블라인드라는 것이다. 공격자는 어떤 클래스를 공격할지 지정할 수 없다. 그럼에도 불구하고 이 한계를 부분적으로 해결하기 위한 방식이 있다. 이는 브라우저에서 추가 기능같이 사이드 채널 정보를 사용하여 실제 레이블을 추론하는 것이다. 이를 통해 부분적으로 해결이 가능하긴 하다.

 

실험 결과는 논문 보세요..