seccamp23(AIセキュリテイ)参加記
はじめに
セキュリティキャンプというやつに行ってきました。疲れた...
非常に長いですね。4泊5日は苦しいものがありました。そもそもnot模範的学生なのでいっぱい椅子に座る時点で大変な行動でした。禁酒・禁煙
来年応募する人や受講してる人、受講した人とかが読んでくれたらいいねと言った感じで書こうと思います。
「AI attack&defence」の講義内コンペの私の解法(雑)を書いておきますので、未来で勝ちたいあなたは必読です(?)。あとはお気持ち表明です。
応募課題とか
課題は文章でゴリゴリ書く感じのものでした。何も実装していません。
カスのコミットログで悲しいんですが、多分5/21,22で書いたっぽいですね。中間テストとかぶって大困りしました。
課題の記述には、倫理的設問と技術的設問で意識を切り替えていました。倫理的設問ではとにかく議論が発散しないように一貫した主張を用意すること、技術的設問では実装可能性を大切にリファレンスなどを適切につけながら記述することを意識していました。あとは一般的な話で、読みやすい文章フォーマットとか、オリジナリティとかそう言ったところは意識した気がします。未来の応募者で、実物(全文)が見たいよ〜〜みたいな人はTwitterにでも連絡いただけたらお送りします。応募課題晒しをするほどの胆力は私にはありません...
倫理の講義
次の講義をやりました。
- AIとセキュリティについての議論
- AIと責任
- AIと規制
- AIと善悪
- AI最前線情報
議論では、他の受講生の感受性や倫理観の高さに驚くところがありました。私は割と機械を信じている側面もあって、例えば判例のたくさんあるタイプの裁判などでは機械に判断を委ねてもいいよねみたいな意見でした。議論していると、もっと複雑な感情でAIによる決定を考える人が多い印象でした。言語化するのが上手い人が多くて、すごいな〜と感じるところがありました。
技術の講義
次の講義をやりました。
- 敵対的サンプルの講義
- 存在・理論の紹介
- ハンズオンでの実行
- 攻撃・防衛を行う競技
- 機械が生成した文章の判別機を作る
- 機械による文章の特徴を議論
- 実装
敵対的サンプルの講義
講義の内容
『実践 AIシステム Attack&Defense』という講義です。詳細は講師の方が運営されているAIディフェンス研究所の連載記事「Adversarial Robustness Toolbox(ART)超入門」を追うとある程度似ている気がしています。とても良い内容でした。理論は知っていても実行したことはない手法もあり、ハンズオンを通してかなり理解が深まりました。特に印象的だったのは敵対的学習の効果でした。これまで自分は機械学習のタスクをこなす際も汎化性能に手いっぱいで、セキュアであるかという点に意識を持って行ったことがなかったのですが、適切に防衛を施すと、かなり強度をあげられることを認識して驚きました。
機械が生成した文章の判別機を作る
ディスカッションをした後、できる範囲での実装を行いました。
実装に使える時間が2時間程度でデータもなかったので、ルールベースなんですが、AIっぽさを人間が考えて、それをスコアリングする感じでやりました。
- 単語のバリエーション
- 文章内urlなど事実の確認
- 語尾の特徴を精査
- 表記揺れ精査
みたいなのを実装した感じです。(雑) 形態素解析に魂を売っています。
実装までは行きつかなかったこととして
- 文章のリズムを解析する
- 並列要素の文章量が似ている
- 固有名詞にHallucinationがないかをチェックする
- 上記スコア群をLGBMなどに突っ込んでモデルを用意する
みたいなのがあります。GPTZeroなどを見ても、高精度で判別機を用意するのはかなり難しそうな印象がありますね...><
共通講義
今回のセキュリティキャンプを通して最も記憶に残ったことの一つに、共通講義でのプレゼンがありました。(ちょっとクローズド情報っぽいので詳しくは書きませんが...)思想面ですごく影響を受けたので、もしseccampへの参加を迷っているのであれば、ぜひあなたも参加してみてくださいといった感じです。
AI attack&defence
このコンペの記憶が強く、おそらくこの記事が読まれる時、多くの理由がこの項にあると思うので、ちょっと詳しく書いていきたいと思います。
上記した敵対的サンプルの講義のまとめとして、受講生内でのコンペが行われました。これについて、自分がとったアプローチを記述しておきたいと思います。
コンペのルール
- 各競技者は攻撃と防御をそれぞれ行う
- 攻撃とは、画像分類モデルに対して、敵対的サンプルによるノイズを載せて誤分類を引き起こそうとする行為
- 防御とは、敵対的サンプルを含むテストケースについても、正しいクラスに分類するMLモデルを作成する行為
- 攻撃者としては次の動作を行う
- 各参加者に対して、敵対的サンプルを30分に一度送る
- 誤分類を引き起こしたケース数に応じてスコアを取得する
- 防御者としては次の動作を行う
- 敵対的サンプルに対して頑健なモデルを用意してアップロードする
- このモデルを頑健にすれば、他の参加者が攻撃によって取得できる得点を下げることができる
- 30分に一度、運営側がモデルに対してサンプルを投げる。これの正答数に応じてスコアを取得する
方針
達成できたこと
- 攻撃者
- 環境のメタ読み
- 授業でFGSMが紹介されたので、みんなFGSMに対する敵対的学習などをしてくるんじゃないかな...?などと
- FGSM以外での攻撃
- PGDやFABなどを試してみて、各防御者に対して有効な方法を探索していた
- 他者に効きやすそうな攻撃用モデルの構築
- 今回はブラックボックスへの攻撃なので、相手のモデルをドンピシャで当てられれば攻撃能力は上がる
- メタ読みに基づいてFGSMで敵対的学習をしたモデルに対して強くなるように攻撃用のモデルを構築した
- ルールの上界を探索
- 今回のルールでは、攻撃側はとある閾値(非公開情報)までしかノイズを載せられず、閾値を超えた量のノイズを載せた画像はシステムに弾かれる
- 伝家の宝刀、手動二分探索で許される閾値の値を探索して提出する
- 環境のメタ読み
- 防御者
- モデルの精度をあげる
- ベースラインより学習量を増やす
- データのaugumentationを実施する
- 敵対的学習をする
- メタ読みに基づいて、参加者が使ってきそうな攻撃用モデルに対して敵対的学習をする
- テストデータがリークしているので、それらを混ぜて学習した(邪道)
- モデルの精度をあげる
時間が足りなかったこと
対策に使える時間が一晩しかなかったので、頓挫したことが多くありました...><
- 攻撃者
- もうちょっとリサーチしたかった...
- 攻撃手法のアンサンブルとかしたかったけど、閾値の探索あたりで時間が足りなくなりそうだったので競技中は断念
- 防御者
- モデルのアーキテクチャを大きく変更する
- とにかく強かったらいいんじゃないと思ってResNetをベースにしたモデルを用意した
- 汎化性能モリモリの大型モデルよりも、小さめのモデルで敵対的学習をちゃんとやった方が(コンペにおいては)強かった
- 計算資源不足によって断念
- 前処理をやる
- やれなかった...
- 正味モデルのアーキテクチャの実験をしていて時間切れ
- これをちゃんとやった方が強かった気がする
- 圧縮やsqueezingなど、講義でやった内容すら実装(というより学習時間)が間に合わなかった...
- データを増やす(v2)
- 学習時augumentationなども画像分類だと定石
- 前処理をした画像を4つとかくっつけて大きい画像をモデルに突っ込むとかなり良さそう
- モデルのアーキテクチャを大きく変更する
結果
勝てた〜〜〜。正直やろうとしたことはあまりうまく行ってなかったのですが、メタ読みがうまく行って勝てました。うれしい。
閉講式とか
成果発表では、専門コースの代表として修了証を受け取りました。不思議。思ったよりお堅い感じの雰囲気でちょっと緊張しちゃいました。
髪が長すぎる写真が公開されていてウケました。髪切れ。
終わりに
めちゃくちゃいい体験になりました。朝ごはんに1/4回しか出席できなかったのが悔やまれますね。
AIセキュリティを学んだはずなんですが、セキュリティキャンプを通じてシステムプログラミングへの興味がめちゃくちゃ沸いています。やりたい。
もちろんAIセキュリティもやりたい。普通に何も知らないので...
講義通して時間が足りず頓挫系がかなり多かったので、追々どうやったらよかったなみたいなのを埋めていきたいですね。
コンペは来年開かれるのかわからないですが、開かれたら上記を参考に戦ってみてください!
Discussion