「VAE+シャッフリング によるプライバシーを考慮した難読化による秘密計算」について理解したかった

**@kenmaro**です。
普段は主に**秘密計算、準同型暗号などの記事について投稿しています**。
秘密計算に関連するまとめの記事に関しては以下をご覧ください。

> - [秘密計算エンジニアを始めて２年半が経った。](https://qiita.com/kenmaro/items/48059dd60f79e80f5ef8)
> - [秘密計算エンジニアを始めて3年が経った。](https://qiita.com/kenmaro/items/a1d90a074d552b7bf886)

#### 勝手に秘密計算アドベントカレンダーについて

この記事は

https://qiita.com/kenmaro/items/3e8a124ce4306fe040dc

の「１４日目」の記事
としようかと思っています。
興味のある方はアドベントカレンダー参加してみませんか？
ご連絡お待ちしております。

## 概要

今回の内容は、

https://mdpi-res.com/d_attachment/applsci/applsci-12-03997/article_deploy/applsci-12-03997-v2.pdf?version=1650022664

この論文をフォローする、という内容になります。


## この論文をきちんと読んでみようと思ったきっかけ

きっかけは、

https://protopia.ai/

上のProtopia AI が開発しているようなプライバシー保護の画像解析AIのデモを見たからです。

上のウェブサイトに行くと、「How it works」にあるデモを見ることができます。

下は画像です、動画を見る場合は上のウェブサイトからお願いします。

![Screen Shot 2022-06-10 at 17.00.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/d5086477-39a9-a3f4-0892-b6d96522d228.png)


左側の動画は元動画であり、右側の動画は元動画をもとに独自アルゴリズムによってノイズが挿入された動画です。
右の動画を見るだけでは、人間の目ではジラジラした元動画を想像しにくいような動画になっていますよね？
左の動画には顔認識をするAIにより、顔の位置を赤いボックスで表示しているのがわかります。

ここで、実際に彼らがデータとして受け取るのは右側のデータです。
右側のデータは先述の通りノイズが付加された画像になっていますが、
面白いところは、AIモデルはこのノイズが乗った動画を入力としてなお、顔認識を同じような精度で行えているということです。


つまり、入力画像に人間には理解できないノイズを挿入することでマスクし、
データ所有者の観点でデータプライバシーは守る。

と同時にAIが顔認識するのに必要な情報は残し、それをAIに投入することでプライバシーを守りながらも行いたいタスク（今回は動画から顔を認識するタスク）を行なっています。

なかなか面白い技術だよなあと以前思ってはいたのですが、そこから調べて実際にどのようなアルゴリズムがこれを達成できるのかは調べていなかったため、
今回調べようと思い立ちました。

その過程で上述の

https://mdpi-res.com/d_attachment/applsci/applsci-12-03997/article_deploy/applsci-12-03997-v2.pdf?version=1650022664

この論文を見つけ、読んでまとめてみようと思った次第です。

なお、この論文を読むための前提知識として、ある程度画像認識AIのモデルについて理解している必要があるため、いろいろな記事を付随して読む必要もあるとは思いますが、できるだけ簡潔に解説できたらと思います。





## 忙しい人へ

- プライバシー保護を考慮した画像認識モデルをどう学習するか、ということを主題としているよ
- 2つのオブファスケーション（画像に対する難読化）が使われているよ
- １つ目はVAEと呼ばれるエンコーダーモデルによるオブファスケーションだよ
- ２つ目はシャッフリングによるオブファスケーションだよ
- Discussionセクションのところを最後に解説するよ


それでは、始めます。


## 1つ目のオブファスケーション（VAE）

VAEは（Variational Auto Encoder）
と呼ばれる、オートエンコーダーの派生バージョンです。

オートエンコーダは入力を画像とすると、（基本的には）自分自身を出力とするようなモデルです。

いろいろなVAEの解説記事が存在していますので、これを機にVAEについて詳しく学習したい方はそちらをフォローしてみてください。

私としては、VAEそのものの解説については既存記事にお任せしたいと思っています。
乱暴にいってしまえば、特徴量空間へのマッピングにより、
次元削減を行い、入力画像をデコーダーによって復元できるだけの「十分な」情報を抽出するのがエンコーダーが行っていることです。（上の図の左の青い部分）

デコーダー（上の図の右の赤い部分）は、エンコーダから吐き出された特徴量をもとに、入力画像を出力されるように学習されたモデルになります。

![Screen Shot 2022-06-10 at 17.38.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/97404159-7b1c-34bc-2e48-9c410822257f.png)


本来であれば、エンコーダの出力はデコーダの入力となるのですが、
ここではエンコーダの出力はそのまま抽出され、デコーダは使用されません。
このエンコーダからの出力がそのまま、「難読化されたデータ」として活用されることになります。

下の図は
- (a)が入力画像
- (b)がエンコーダからの出力①（特徴量空間の確率分布の平均値を表すベクトルをreshapeしたもの）
- (c)がエンコーダからの出力②（特徴量空間の確率分布の分散を表すベクトルをreshapeしたもの）

となっており、ユーザは(a)をそのまま学習に使うのではなく、（前処理された）(b), (c) を非信頼領域で行われる学習に使うことになります。



![Screen Shot 2022-06-10 at 17.47.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/22f775c5-f65b-4619-1a1c-a4ca84d662a0.png)

## ２つ目のオブファスケーション（シャッフリング）

１つ目のオブファスケーションに加えて、シャッフリングを用いたオブファスケーションを論文では用いています。
このオブファスケーションはDNNを用いた１つ目のオブファスケーションとは異なり、
単純に画像全体の輝度をシャッフリングし撹乱するものです。

![Screen Shot 2022-06-10 at 17.50.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/26eda7ad-db6b-86bc-0b6e-0ca9a9642a2e.png)


上記の画像を見ればわかりやすいですが、各ピクセルに対して輝度（0~255)の値をパーミュテーションさせています。
また、パーミュテーションをしたあとの出力に対してモジュラスNを取ることで、マッピングを行いさらに情報量を小さくしています。


## オブファスケーションの全体像

![Screen Shot 2022-06-10 at 17.56.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/42d7ae2a-4f17-3cb4-c359-2fe3e739f358.png)

オブファスケーションの全体像としては上のようになります。

前述した通り、

- 元画像は学習されたVAEエンコーダへと入力され、特徴量のみ抽出される
- 特徴量は画像としてreshape される
- 特徴量はシャッフリングにより輝度に対して難読化が施される
- 最終的な難読化された画像として出力される

![Screen Shot 2022-06-10 at 17.58.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/519792/85feecf3-b271-c057-e90f-d9adc0443ccc.png)


上記画像に対して、(a)が元画像であり、（b）がVAEによる難読化を施したもの、
（c）がシャッフリングによる難読化を施したもの、（d）が両方を施したもの

となっています。


## 特有のタスクに対するモデル学習

結局のところ、この２つのオブファスケーションはあくまでも、
特有のモデル学習させるためのデータの難読化であり、言ってしまえば前処理でした。

ディスカッションセクションのところで言及しますが、
この二つの難読化を加えることで、複数のデータソースから難読化されたデータを集めることができます。

それらの集合されたデータに対して、たとえば画像識別を行ったり、顔認識を行ったりなど、
特有のタスクを初めて学習することになります。


## ディスカッション

論文第４章のディスカッションセクションについて少しまとめます。
概ねこの論文でのまとめが書いてあります。

> 提案された難読化アルゴリズムの最初の特徴として、不可逆性に触れる。
学習済みのデコーダそのものへのアクセスがなければ、エンコーダのみから画像を復元しようとすることは不可能である。
また、全単射でないマッピングの不可逆性も、モジュラスをとったことによる「多対１」の特性から不可能である。

> これらの難読化を施すことで、複数パーティによるプライベートデータにおける学習をする際の、暗号鍵のマネジメント問題に対してのソリューションとなりうる。
可逆な関数が存在しないということは、この難読化に対しては複数パーティによってこれらが共通の難読かとして使用され、難読化されて集合されたデータに対して特有のタスクを目的とした学習が可能ということである。

> もう一つの利点としては、VAEモデルが難読化を行うパーティそのもので学習される必要もないし、似たようなデータセットを用いて学習を行う必要もないということである。
仮にエンコーダがターゲットとされるデータセットによって学習されなかったとしても、プライバシーレベルには影響がない。したがって、パブリックデータセットをVAEの学習に用いることができるため、
機密データをエクスポーズする必要がない。

> 弱点としては、特有のタスクを学習する時のアキュラシーが、難読化データに対して学習を行うことで低下してしまうことであり、、、、。


となっています。

正直なところこの論文を読んで、面白いと思った箇所や勉強になった箇所もあった一方で、
難読化と精度のトレーすドオフの問題にブレークスルーがあったわけではないことがわかりました。

とはいえ、暗号を用いて学習するという観点ではディスカッションの項にあったように鍵をどうやってマネジメントするか、といったような問題は単純な解決のしようがない問題として存在するため、苦肉の策での難読化、といったところでしょう。
（実際はTFHEを使えば鍵のスイッチングは簡単に行うことができるのですが、速度の問題と、複数パーティの異なる鍵から計算用の鍵に巻き直したところで、その復号鍵はだれが管理するの？という話にはなります）

したがって、このようなDNNとシャッフリングを用いたような難読化が研究で行われている、
ということは知っておく一方で、これがブレークスルーには今はならないような気もします、
という個人の意見を最後に述べておきます。

## まとめ

今回は、いつもの準同型暗号をもちいてAIの推論を行ったり、学習をおこなったりする、
という視点から少し離れて、
最新の論文で見つけたDNNとシャッフリングを用いた「難読化によるデータ連携＋特有のAIモデルの学習」
という観点で記事を書いてみました。

そして、最後に、面白い手法ではあるものの、難読化による精度劣化はもちろん避けられず、
そこの劣化が許容範囲であるかどうか、などいろいろな制約がある上での手法であること、
根本的なブレークスルーとはなり難いこと、などについて言及しました。

結局のところProtopia AI がどのようなアルゴリズムでデモを実装しているのか、
というところに言及できなかったのが悔しいので、
もう少し勉強してまた記事を書きたいと思っています。


勝手に秘密計算アドベントカレンダーとして、
いつものように準同型暗号だけではなく、広い視点でもっと秘密計算について書こうと思っているなか、


- 準同型暗号
- TEE
- 難読化

についてこれでなんとなく調査できたように思います。


次は、やはり差分プライバシーとか秘密分散型の秘密計算によるAIモデル学習などが面白い分野でしょうか。


まとめた上でいい記事が書けるかはわかりませんが、

- OpenMinedのPysyft
- Facebook のCrypten

などが有名かと思いますので、次回はぜひそれらに切り込んでいければと思います。



今回はこの辺で。


@kenmaro