
29,833 文字

事実として、ほぼ常に有効な手を打てるということは、内部で何らかの形で世界を正確にモデル化しているものが存在するはずだということを意味します。意図性やそういった類のことを帰属させるのは好みませんが、現在のボードの状態を理解し、何をすべきかを理解しながら、これらの手を打つことを可能にする何かをモデルは行っているのです。
推論とは何かについて、人によって定義が異なります。モデルは賢くない、良くない、自分の問題を解決できないと考える人々は、言語モデルを除外する定義を与えて「これは推論ではない」と言います。一方、AGIに非常に傾倒し、言語モデルが2027年までにすべてを解決し人間の仕事を置き換えると考える人々に推論とは何かを尋ねると…
私はニコラス・カリーニです。Googleディープマインドのリサーチサイエンティストで、モデルに悪いことをさせようとしたり、これらのモデルに対する攻撃のセキュリティ上の影響を理解することを研究しています。物事を壊すのが好きで長年これを行ってきましたが、印象的だからという理由で、本来適用すべきでない分野に適用されることを非常に懸念しています。その結果として、これらのモデルに対する攻撃が悪いセキュリティ上の結果を招くことを心配しています。
MLSTはsenslがスポンサーです。senslはAIワークロード向けに最適化された計算プラットフォームで、Llamaなど最新のオープンソース言語モデルをすぐに使えるようサポートしています。価格帯とモデルを選択するだけで、エラスティックに自動スケールし、消費量に応じて支払うことができます。基本的にモデルは常に動作させることもできますし、使用していない時は休止させることもできます。何を待っているのでしょう? sent.mlにアクセスして今すぐサインアップしましょう。
tabは私がZで始める新しいAI研究所です。過去のAIに関連するベンチャーから資金を得ており、チーフサイエンティストとディープラーニングエンジニア・研究者を募集しています。deepsのスイス版として、非常にモチベーションが高く、勤勉な少人数のグループで、LLMとOwenSteinモデルから始めて研究を行い、リバースエンジニアリングや技術の探求を行っていきます。
ニコラス・カリーニ、MLSTへようこそ。ありがとうございます。視聴者の皆さん、ニコラスは紹介の必要がないほど有名な、MLのセキュリティ研究者としては間違いなく最も著名な研究者の一人で、Googleで働いています。2度目のご出演で素晴らしいです。そうですね、1回目はパンデミック中でしたが、良かったですよ。はい、MLSTはパンデミックを生き延びたプロジェクトの一つで、とても素晴らしいことです。
それでは始めましょう。将来的に私たちのシステムは安全でない状態に収束し、それと共に生きていくことになると思いますか?
まあ、現在の通常のセキュリティでもそうですよね。完璧なセキュリティというものは何にもありません。誰かが本当にあなたのコンピュータに悪いことを起こそうと思えば、勝ってしまうでしょう。それを止めることはほとんどできません。ただ、政府があなた個人に悪いことを起こそうとは思っていないという事実に依存しているだけです。もし彼らが決めたら、何かできることがあるはずで、それは成功するでしょう。
私たちが到達できる世界は、おそらく平均的な人々は大抵の場合成功できないという世界です。これは機械学習ではまだ達成できていません。機械学習では、平均的な人でもほぼ常に成功できてしまいます。完璧を目指すべきではないと思いますが、少なくとも、通りすがりの一般人が、GitHubのコードを実行するだけで、あらゆる設定でモデルに任意の悪いことをさせることができるような状況は避ける必要があります。
これを達成するのは非常に難しいでしょう。特にビジョンの分野では、過去10年ほどロバストなモデルの作成を試みてきました。多くのことを学びましたが、客観的な指標を見ると、ここ4、5年はほとんど向上していません。これは、予見可能な将来において完璧なロバスト性を得ることは難しそうだということを示唆しています。しかし、研究を続け、物事を改善し、最終的にはそこに到達できることを期待することはできます。多くの作業が必要になりますが。
イリアが私に質問するよう頼んだのですが、将来的にMLシステムをハッキングすることは違法になると思いますか?
分かりません。このような予測は非常に難しいです。特にアメリカでは、コンピュータ不正利用防止法がどのような設定でどのようなことをカバーしているのか分かりません。これは政策や法律の専門家に任せるべき問題だと思います。政策と法律に関する私の見解は、人々が世界の真実に基づいて決定を下している限り、彼らに決定を任せるべきだということです。私がここでコメントしようとしているのは、私たちが考える「世界はこうあるべきだ」ではなく、「真実に基づいて」決定を下すことを確実にすることだけです。モデルを攻撃できるという事実と、様々な悪いことが起こり得るという事実に基づいて決定を下すのなら、私よりも専門家である彼らに任せます。
MLセキュリティに関して、本当にオープンエンドな質問ですが…まずは、将来を予測できますか? MLセキュリティの将来はどうなるでしょうか?
私の…okay、予測を試みましょう。この予測が実現する確率は非常に低いですが、ある意味で中央値的な予測だと思います。
モデルは非常に長い間、比較的単純な攻撃に対して脆弱なままだろうと思います。そして私たちは、信頼できないモデルを使いながらもシステム全体を安全に保つ方法を見つける必要があるでしょう。これは、モデルの周りの残りの世界、システムをデザインする方法を見つける必要があるということを意味します。たとえモデルが完全にランダムな理由だけで何かを完全に誤分類したとしても、システムが恐ろしく誤った行動を取らないようにし、これを修正できるようにする必要があります。
しかし、予見可能な将来、少なくとも私が見通せる限りにおいて、モデルは非常に脆弱なままでしょう。特に機械学習の時間スケールでは5年は永遠です。言語モデルですら、本当に大きな進歩があったのはここ7年程度です。そのため、5年先を予測するのは、この期間をほぼ2倍にすることになります。
現在のパラダイムが続く限り、物事はかなり脆弱な状態にあるように見えます。しかし、言語モデルはまだ7年程度で、本格的に攻撃を試み始めたのはここ2、3年です。5年もあれば、言語モデルを攻撃してきた時間の2倍になります。もしかしたら、すべてを理解できるかもしれません。言語モデルは根本的に異なっており、状況は変わるかもしれません。
しかし、私の先入観としては、10年間研究してきたビジョンモデルのケースでは物事が非常に難しいことが証明されています。そのため、物事は難しいだろうという予想を持っており、結果として信頼できないシステムに依存してでも機能するシステムを構築する必要があるでしょう。
素晴らしいですね。あなたのブログを読んでいたのですが – みんなも読むべきです。本当に素晴らしいブログです。実際に、チェスプレイに関する最初の記事を出したとき、私はこの番組で10回くらい引用しました。本当に興味深い内容でした。
少し読ませていただきますが、タイトルは「大規模言語モデルとチェスをプレイする」です。
「今週まで、機械学習モデルがチェスが上手くなるためには、明示的にゲームをプレイするように設計される必要がありました。8×8のボードがあること、異なる駒があること、それぞれの駒がどのように動くか、ゲームの目的は何かを明示的に教える必要がありました。そして、自分自身と強化学習を行う必要があり、そうすれば勝てるようになりました。」
そして、これは月曜日にOpenAIがGPT-3.5-turbo-instructをリリースしたときに変わったと述べていましたね。その出来事について教えていただけますか?
GPT-3.5-turbo-instructと、後に他の人々がオープンソースモデルで行ったことについて…裏で何か変なことをしているのではないかと推測する人もいましたが、これを複製できるオープンソースモデルがあります。
言語モデルがかなり高いレベルでチェスをプレイできるということですが…最初に誰かに「機械学習システムがチェスをプレイできる」と言うと、すぐに「なぜそれが重要なの? 30年前にDeep Blueが人間のトップを倒したじゃないか。それも当時のAIの一形態だったんじゃないの? なぜこのようなシステムがチェスをプレイできることに驚くべきなの?」という反応が返ってきます。
ここでの根本的な違いは非常に興味深いと思います。モデルは手順の連続に対して訓練されました。チェスでは、手を「1.e4」のように表記します。これは「キングポーンをe4に動かす」という意味で、その後「e5」と黒が応答し、「2.」の後に何かが続き、「f3」で白がナイトを動かすなどといった具合です。これらの手順の連続に対して訓練し、そして「はい、言語モデルよ、予測タスクを行ってください」と言うだけです。これは単なる言語モデルで、次のトークンを予測するように訓練されているだけです。そして、単に有効な手を打つだけでなく、非常に質の高い手を打つことができます。
これが興味深いのは、まず有効な手を打てるという事実だけでも興味深いことです。なぜなら、チェスにおける有効な手とは何かを記述するのは複雑なプログラムだからです。ランダムな文字を出力して有効な手に偶然たどり着くことはできません。このモデルはほぼ毎回有効な手を打ちます。
私はモデルの内部で何が起きているかについて多くを語るのは好みません。というのも、システムを理解する方法としてはそれほど有用だとは思わないからです。しかし、ほぼ常に有効な手を打てるという事実は、内部で何らかの形で世界を正確にモデル化しているものが存在するはずだということを意味します。意図性やそういった類のことを帰属させるのは好みませんが、現在のボードの状態を理解し、何をすべきかを理解しながら、これらの手を打つことを可能にする何かをモデルは行っているのです。
そしてこれだけでなく、実際に質の高い手を打つことができます。これは私に、モデルが実際の局面をかなり良く理解していることを示していると思います。私はチェスを控えめなレベルでプレイします。下手ではありませんが、盤面を理解していますし、だいたい何をすべきか分かっています。しかし、40手連続で手を並べられて、「さあ、41手目は?」と言われても、その時点での盤面を頭の中で再現することはできません。
somehow、モデルはこれを行う方法を見つけ出しました。ルールについて何も教えられていないにもかかわらず、盤面を再構成し、正しく駒を配置し、有効な手を打つことができます。内部でどのように行っているのかは分かりませんが、これは非常に興味深いことです。
これは私に、モデルができること、できないことについての考え方を変えさせました。表面的な統計なのか、それとも実際に何が起きているのかについての、より深い統計なのか…これが私がこれを世界について興味深いことだと考える主な理由だと思います。
私たちは人間の理解の抽象性について、奇妙な人間中心主義を持っていますね。これらの人工物は表面的な理解しか持っていないのですが、そのスケールがとても大きいため、ある時点でその違いは奇妙な区別に過ぎなくなります。
しかし、あなたは記事の中で非常に興味深いことを言っていました。モデルは「勝つためにプレイしているわけではない」と。そして、これは私も番組で言ってきたことですが、モデルはあなたを反映しているということです。あなたが良いチェスプレイヤーとしてプレイすれば、モデルも良いチェスプレイヤーとして応答します。これはコーディングでも同じで、これは人々の経験の違いを説明するかもしれません。LinkedInを見ると、あそこの人たちは明らかにLLMから良い応答を得られていません。一方、あなたのような人は、LLMを使って銀河脳レベルで最前線を押し進めており、人々はあなたがLLMを使っていることさえ知りません。経験には大きな違いがありますね。
そうですね。では、私が「モデルは勝つためにプレイしているわけではない」と言ったときの意味を説明させてください。あるチェスの盤面があったとき、そこに至る複数の方法を見つけることができます。グランドマスター同士の通常の対局で生じた盤面であっても、誰も打たないような不合理な手順で、その盤面に到達することができます。
たとえば、白のナイトがG3にあるとします。まず白のナイトをランダムな場所に動かし、それからG3に置くことができます。次に、ビショップがH2にあることが分かったら、ポーンを動かしてビショップをH2に置くことができます。このように、不合理な手順を重ねることで正しい盤面状態に到達できます。
そしてモデルに「さあ、手を打ってください」と言うと…モデルはほとんどの場合、依然として有効な手を打ちます。盤面状態が分かっているのです。しかし、打つ手は非常に奇妙です。とても変な手なのです。なぜでしょうか?
モデルは「チェスの目的は勝つことだ」とは教えられていません。モデルは「以前見たものと似たものを作れ」と教えられただけです。レーティング50くらいの2人がプレイしているチェスの手順を見て、「ああ、このゲームは有効な手を打って、何が起こるか見るものなんだな」と理解したのです。そして、モデルはこれを非常に上手く行います。
これは合成的な方法で行うこともできますし、明示的なケースを見つけることもできます。多くの人が陥る罠を見つけ、モデルにその罠に陥るような手を打たせることができます。トレーニングデータがそのように見えたので、モデルもその罠に陥るべきだと考えるわけです。
これは、これらのモデルの問題の一つです。最初は勝つためにプレイするようには訓練されていません。しかし、実際の言語モデルでは、ほとんどの場合RHFやSFT命令チューニングなどでポスト訓練を行います。これを行う大きな理由の一つは、モデルが最初に訓練されたものと、実際に使用したいものとの間のミスマッチに対処する必要がないようにするためです。
これがGPT-3の使用が非常に難しかった理由で、instructシリーズの論文が非常に重要だった理由です。モデルが内部のどこかに持っている能力を、より簡単に再現できるようにしたのです。今日のチャットモデルを使用する場合、ほとんどの場合、質問の仕方についてそれほど心配する必要はありません。愚かな質問をしても正しい答えを得られるように設計されているからです。
とはいえ、まだある程度はこの性質を持っていると思います。ただし、ベースとなるモデルがトレーニングデータに基づいて訓練されただけの場合よりは少ないでしょう。
RHFについて少し脱線させていただきたいのですが…昨日、coohのMaxと話していました。彼らは良い選好操作がどのように機能するかについて素晴らしい研究を行っています。彼らによると、人間は実際、ある物事を他の物事と区別することが非常に下手だそうです。私たちは自信に満ちた回答、冗長な回答、複雑な回答を好みます。
たとえば、私はスタイルの理由でChatGPTモデルが大嫌いです。正しい回答をしていても間違っていると思ってしまいます。言語モデルにこのような事後訓練を行うとき、それは能力にどのような影響を与えるのでしょうか?
分かりません。これらの質問に答えるのは非常に難しいと思います。多くの場合、事後訓練前のモデルにアクセスできないからです。論文から数字を見ることはできます。GPT-4の技術報告書やその他の報告書には、事後訓練前の生のベースモデルが非常によく校正されているということを示す数字があります。
これは、モデルがある確率で答えを出すとき、その確率で正しいということを意味します。たとえば、数学の問題で「答えは5です」と言い、トークンの確率が30%の場合、約30%の確率で正解します。しかし、事後訓練プロセスを行うと、校正が狂ってしまい、このような振る舞いをしなくなります。
事後訓練によって、モデルが劇的に良くなることもあります。指示に従うのが遥かに上手くなるからです。実際には新しいことをあまり教えていないのに、遥かに賢く見えます。これらのことがどのように組み合わさっているのか、私にはよく分かりません。
これらのモデルは有効な手を打ち、有能に見えますが、時々破滅的な奇妙な失敗モードを持ちます。これを推論と呼ぶべきでしょうか、そうでないでしょうか?
私は意図性を帰属させることには非常に消極的です。推論は、人によって意味するところが異なります。そのため、質問への答えは、推論をどのように定義するかに完全に依存します。
モデルは賢くない、良くない、自分の問題を解決できないと考える人々は、「推論とは私にとってこういうことを意味する」と言い、言語モデルを除外する定義を与えて「これは推論ではない」と言います。一方、AGIに非常に傾倒し、「言語モデルは2027年までにすべてを解決し、すべての人間の仕事を置き換える」と考える人々に推論とは何かを尋ねると、「推論とはモデルが行っているプロセスのことだ」と言い、「はい、彼らは推論しています」と答えます。
そのため、モデルが実際に推論しているかどうかを議論するのは非常に難しいと思います。議論できることは、入力と出力の振る舞いはどうなのか、モデルは質問に答え、タスクを解決し、何らかの形で挑戦的だったものを正しく行ったのか、といったことです。これは、何かに意図性を帰属させようとするよりも、これらの質問に答えるより簡単な方法だと思います。同じ定義から出発していない人々とこれらの議論をするのは本当に難しいのです。
これについては本当に悩ましいですね。あなたが言うように、デフレ的な方法論では、それは入力と出力のマッピングに過ぎません。一段階上に行くと、Benjoは推論は基本的に知識と推論だと言っています。確率的な意味でですね。これは知識の獲得や組み合わせについてだと思います。
エージェンシーについても同じことが言えます。単純な形式では、それは単なるオートマトンです。環境があり、計算があり、行動空間があり、それだけのものです。しかし、定義の中に自律性や創発性、意図性のようなものが必要だと感じます。でも、「なぜそんな言葉を使うの? それがやるべきことをやるなら、それでいいじゃないか」と議論することもできます。
はい、私もそのように感じます。推論とは何かを考えるのは、哲学的な背景を持っている人にとっては非常に興味深いことだと思います。私にはその資格がないので、モデルが推論しているかどうかを判断する立場にはありません。
私にできることは、「あなたはモデルをこのように使用したい。この振る舞いを実行してほしい。実際に実行したかどうかを確認しましょう」と言うことです。もしすべてのケースで正しいことを行っていることが分かったら、モデルがそこに至るまでに推論したのか、ルックアップテーブルを使用したのかは、あまり気にしません。正しい答えを毎回与えてくれるなら…どのようにしてそこに至ったのかはそれほど重視しません。
私たちには、Pi(π)とロバスト性について確立された感覚があります。たとえば、このチェス表記で、表記の構文を変更すると、おそらく壊れてしまうでしょうね?
はい、そうです。チェスの表記には複数の方式があります。古い表記法では、「キングズビショップがクイーンズスリーに移動」というように、マスの番号付けが異なっていました。この表記法でモデルに質問すると、何が起きているのか全く分かりません。表面的には手順の連続のように見えるものを書きますが、正しい盤面状態とは全く関係ありません。
もちろん、人間ならこうはしません。手順の連続を作り出すように頼まれても、これらのマスがどれで、どの駒がどのように動くのかを覚えるのに時間がかかるでしょう。もっと考える必要がありますが、盤面は理解しているので、正しく行うことができます。モデルは今のところそうではありません。
もしかしたら、これがあなたの推論の定義かもしれません。「では推論は起きていない」と言うかもしれません。しかし、他の人は「なぜモデルが見たことのないものに一般化できることを期待するの?」と言うかもしれません。
面白いのは、私たちは次のような世界から来ています – 7年前、ImageNetでモデルを訓練し、画像を破損させると精度が下がるという失敗モードがあるのは「当たり前だ」という論文を書いていました。あるいは、「ImageNetで訓練したモデルをCIFAR-10でテストしたら機能しませんでした。このモデルはなんて駄目なんでしょう」という論文を書いたら、人々は笑うでしょう。「当然だろう。ある分布で訓練して、別の分布でテストしたんだから。一般化を求めていないのに、一般化しなかった。お見事。問題を解決できなかったのは当たり前だ」と。
しかし今日、言語モデルに対して私たちは何をしているでしょうか? ある分布で訓練し、時には訓練していない異なる分布でテストして、モデルを笑います。「なんて馬鹿なんだ」と。でも、はい、訓練していないものに対して訓練していないのです。将来的には、ドメイン間で魔法のように一般化できるモデルを持てるかもしれません。しかし、私たちはまだ機械学習を使用しているのです。テストしたい種類のデータで訓練する必要があり、そうすれば訓練しない場合よりもはるかに良く振る舞うでしょう。
メールのやり取りの中で、あなたは正確にはこれらの言葉を使用しなかったのですが、多くの場合で少し困惑を感じたと言っていました。「確率的オウム」だと発言し、その後何度も間違っていたことが証明された、と。私も同じです。一つの考え方は、Rich Suttonのように、ただデータと計算能力をより多く投入すればいいというものです。もう一つの考え方は、完全に異なる手法が必要だというものです。これらのものをスケールアップするだけで、私たちが話しているような種類の推論ができるようになるという考えには、まだ賛同できますか?
おそらく…はい。将来がどのようになるかについて良いビジョンを持っている人もいますが、私のような人間は、世界がどのように見えるかを見て、そこで興味深い仕事をしようとします。
これは私には上手く機能します。なぜなら、特にセキュリティにおいては、人々が実際に攻撃を行っているかどうかだけが重要だからです。世界について真実のことを見て、セキュリティに関する論文を書くことに集中して良いと思っています。世界が大きく変化したら、それに応じて変化を試み、必要になる前に数年先を見据えてセキュリティを考えることができます。
私が扱う分野の性質上、遠い将来のことを考えることにはあまり時間を費やさない傾向にあります。多くの人々がこれを試みており、上手く行く人もいれば、そうでない人もいます。私には自分が上手く行えるという証拠がないので、現在観察できることに基づいて推論することを主に心がけています。観察できることが変化したら、これらのことについての考え方を変えるべきで、物事を異なる方法で行うべきです。これが私に期待できる最善のことです。
このチェスの件について、誰かが研究したことはありますか? チェス表記のヘッダーで「このプレイヤーのELOは2500でした」などと書くことができますよね。まず最初の質問は、パフォーマンスに相応の変化が見られるのか、ということです。でも、ELOを4000と書いたらどうなるでしょうか?
はい…実際にこれを試みてモデルを訓練しましたが、あまり上手く機能しません。少なくとも単純には…はい、数字を変更するだけでは機能しません。この種の即座の勝利が得られることを期待して、自分たちでいくつかのモデルを訓練しましたが、機能しませんでした。
これは、私がモデルの訓練が下手だということを意味するものではありません。他の、何をしているのか分かっている人ならこの振る舞いを実現できたかもしれません。しかし、私たちが訓練を試みたとき、そしてGPT-3.5-turbo-instructをテストしたとき、統計的に有意な差異はあるかもしれませんが、モデルに「1000レーティングのプレイヤーとプレイしている」と言っても、突然1000レーティングになるようなことはありませんでした。
人々は、スキルを任意のレベルに合わせられるモデルを訓練しようと懸命に取り組んでいます。これは研究論文レベルの課題であり、ヘッダーの3つの数字を変更して最善を期待するようなものではありません。
あなたは「なぜ私は攻撃するのか」という別の記事を書きましたね。その中で、利他的な理由ではなく、パズルを解く楽しみのためにシステムを攻撃することを楽しんでいると書いていました。それについて、そしてなぜその記事を書いたのか、教えていただけますか?
はい…質問された順序と逆の順序で答えさせてください。まず、なぜその記事を書いたのかについてです。
防御を破ったことで一部の人々が私に怒りを向けました。彼らは、私が人類を気にかけていない、ただ彼らを悪く見せたいだけだと言いました。その主張の半分は正しいです。
私はセキュリティを、最大の善を為したいという動機で行っているわけではありません。「最大の人命を救える」キャリアは何かを考えて、その中から選ぶというアプローチはとっていません。もしそうしていたら、おそらく医者になっていたでしょう。実際に直接人々を助けることができる、がん研究をするとか…最大の善を測定できる分野を見つけるということです。
しかし、私はそれらを楽しいとは感じません。自分を動機付けることができません。もし私が異なる人間だったら、生物学の難しい問題を意味のある方法で解決できる人間だったかもしれません。毎朝、人命を救っているという認識で目覚めることができる人間だったかもしれません。しかし、これは私の働き方ではありませんし、多くの人々の働き方でもないと思います。
コンピュータサイエンスにいる人々、さらには定量的な分野にいる人々を見ると、明らかに優秀で、人生でもっと良いことができるはずなのに…その人たちの中には、本当に楽しめないことをしていたら生産性がゼロになってしまう人もいるでしょう。
そのため、私が試みているのは、自分が動機付けられ、本当に良い仕事ができることを見つけ、それらを可能な限り上手く解決することです。ただし、実際に物事を前進させるという制約の下でです。
なぜか分かりませんが、私は常に物事を攻撃することを楽しんできました。他の何よりもこれが得意だと感じています。通常の機械学習も上手くできると思いますが、世の中に存在する他の90%のことで、より良い成果を出せる証拠は全くありません。
私がこれについて考える一つの文は、「そのことにどれだけ優れているか」に「そのことがどれだけ重要か」を掛け合わせたものを最大化しようとするということです。もし本当に得意なことがあり、それが少なくとも正しい方向に物事を動かすものであれば、最大の善をもたらす分野で非常に小さな進歩を得ることよりも、より大きな影響を与えることができます。
これが私が攻撃を行う理由です。一般的に物事を前進させると感じており、他に私ができることよりも上手くできると感じているからです。
また、攻撃は防御よりも簡単だとも言いましたね。確かにそうですね。
これはセキュリティの標準的な考え方です。攻撃側は機能する攻撃を1つ見つければ良く、防御側はすべての攻撃を修正する必要があります。攻撃する側として必要なのは、あなたがコーナーケースの処理を忘れた場所を1つ見つけることです。そうすれば、攻撃者は必要な回数だけそれを実行できます。
これが、通常のソフトウェアセキュリティで見られることです。1行のコードで境界チェックを忘れただけでも、それ以外の部分が完璧なプログラムであっても…これは何を意味するでしょうか? 攻撃者はそれが毎回発生するようにすることができ、製品のセキュリティは本質的にゼロになります。
ランダムな設定では、これは決して起こりません。ファイルのハッシュが正確に2の32乗になって整数オーバーフローを引き起こし、悪いことが起こるというようなことは、ランダムなチャンスでは起こりません。しかし攻撃者は、これが毎回発生するように調整できます。
これは攻撃者にとって、すべてのことを修正しなければならない防御者よりも遥かに容易であることを意味します。そして機械学習では状況はさらに悪化します。通常のセキュリティやソフトウェアセキュリティなどの分野では、少なくとも攻撃のクラスを理解しています。機械学習では、私たちは起こりうる悪いことの新しいカテゴリーを常に発見しています。
そのため、知られている脅威に対してロバストであるだけでなく、誰かが以前考えもしなかった新しい種類の攻撃を思いつくことにも対応する必要があります。これは起こっていません。非常に新しい分野なので、当然攻撃の方が防御よりも遥かに容易なのです。
開示の規範について話しましょう。MLの世界では、これらはどのように変化すべきでしょうか?
はい、そうですね。標準的なソフトウェアセキュリティでは、基本的にどのように進めるべきかを理解しています。20年以上の間、誰かがソフトウェアの悪用可能なバグを発見したとき、どうすべきかについて大きな議論がありました。
90年代後半から2000年代初頭には、「完全な開示」を支持する人々がいました。彼らは、プログラムのバグを発見したら、誰もが同じような間違いを繰り返さないように、そして問題を修正するよう圧力をかけられるように、すべての人に伝えるべきだと考えました。
一方で、「何も開示すべきではない」と考える人々もいました。バグを責任者に報告し、修正されるまで待ち、その後も誰にも伝えるべきではないと。これは彼らが作ったバグであり、他の誰かに悪用のアイデアを与えたくないからです。
ソフトウェアセキュリティでは、「責任ある開示」と呼ばれ、現在は「調整された開示」と呼ばれる方法に落ち着きました。これは、1人に影響する場合、合理的な期間の猶予を与えるべきだという考えです。
たとえば、Google Project Zeroは90日のポリシーを持っています。問題を修正するためにその日数が与えられ、その後、または修正された時点で、すべての人に公開されます。
通常のセキュリティでこの考え方が採用された理由は、ユーザーを保護する時間を与えるためです。多大な害を引き起こす可能性のある新しい攻撃を即座に開示したくはありません。
しかし、会社に実際に問題を修正するよう圧力をかけるために、期限を設定しそれを守ります。多くの場合、公開する予定がないと言うと、他の誰も知らないため、問題は修正されません。彼らは製品を作ることが仕事であって、バグを修正することではないので、誰も知らないのなら、なぜ修正する必要があるでしょうか?
「90日後にこれを公開します。それまでに修正してください」と言うと、時間は与えられていて、修正しないのは彼らの責任になります。単に問題を修正する作業を行わなかっただけだからです。
もちろん例外もあります。SpecterとMeltdownは、過去10-20年で最も一般的な、あるいは最大の脆弱性の2つです。彼らはIntelと関係者に1年の修正期間を与えました。これは非常に重要なバグで、修正が難しく、長期間の猶予を与えるべき正当な理由がありました。
悪意のある人々によって独立して発見される可能性が低いという良い証拠もありました。そのため、長い修正期間を与えました。同様に、Google Project Zeroは、バグが積極的に悪用されている証拠を見つけた場合、7日間の猶予しか与えません。誰かが既に積極的に悪用しているのなら、害は既に発生しているので、7日後にパッチを当てることになります。そうしないと、害が発生していることを全員に伝えないことになってしまいます。
では、その長い前置きの後で、機械学習ではどのように変化すべきでしょうか?
短い答えは「分かりません」です。一方では、これはソフトウェアセキュリティと同じように扱うべきだと言いたくなります。時には、誰かのソフトウェアにバグがあり、パッチを当てて問題を修正する方法が存在する場合があります。
最近、私たちは論文を書きました。たとえば、モデル盗難に関するものです。OpenAIのモデルに対して、OpenAIのサービスにクエリを送ることで、モデルの一部を盗むことができました。非常に小さな部分でしたが、盗むことはできました。
これについてOpenAIに開示しました。なぜなら、この攻撃を防ぐためにAPIを変更することができたからです。その後、論文を書いてオンラインに公開しました。これは非常にソフトウェアセキュリティに似ています。
一方で、パッチを当てることができない種類の問題もあります。最も広い意味で言えば、敵対的例です。「あなたの画像分類器に敵対的例がある」と開示しても、責任ある開示期間を設ける意味は何でしょうか? これは10年間解決しようとしている問題です。さらに90日あっても何の助けにもなりません。
礼儀として、「これが私がやろうとしていることです。この論文でこのように説明する予定です。この特定の攻撃が機能しないように、事前にいくつかのフィルターを設定したいですか?」と伝えることはできます。しかし、根本的な問題を解決することはできません。
生物学の分野の人々と話すと、彼らは「誰かが新しい病原体を作る方法を思いついた場合、開示期間は役に立ちません」と言います。では、これはそれに似ているのでしょうか、それともソフトウェアセキュリティに似ているのでしょうか? 分かりません。
私はソフトウェアセキュリティ寄りの考えを持っています。それが私の出身分野だからです。しかし、これをどのように扱うべきかを正確に言うのは難しいです。これについて話し合い、文書化しようとしている人を多く知っています。1、2年後に同じ質問をされたら、確立されたプロセスと規範があるでしょう。今は非常に初期の段階で、他の分野のアナロジーを探し、最も良さそうなものを見つけようとしているだけです。良い答えはまだありません。
倫理的な理由で追求を控えた脆弱性はありますか?
思い当たるものはありませんが、それは主に、最初から倫理的な攻撃のみを考えるようにしているからだと思います。研究のアイデアは、ごくまれに偶然のインスピレーションで生まれることもありますが、ほとんどの場合、意識的な努力が必要です。
道徳的に問題のありそうなものを考えるのを避け、実際に良い可能性のあるものに焦点を当てるのは比較的簡単です。ただし、今後そういったことが起こる可能性は否定できません。しかし、発見した攻撃で、害が大きすぎるため公開を控えたというケースは思い当たりません。
私は研究の問題を、人類にとってプラスになる方向に偏らせる傾向があります。おそらく、私が攻撃を行う理由に戻りますが、あなたがどれだけ優れているかと、人類にとってどれだけ良いことかの積を最大化したいのです。あなたが取り組む問題を、マイナスにならないものに選ぶことができます。
人類にとっての善の方向性が単にマイナスの数字になってしまうような人々には、あまり敬意を払えません。なぜなら、それをゼロにすることは簡単だからです。何もしなければいいのです。そのため、一般的にプラスだと思える問題を選び、その中で可能な限り良い仕事をすることを心がけています。
従来のセキュリティとMLセキュリティに取り組んでいるということですが、主な違いは何でしょうか?
実は、最近は従来のセキュリティにはあまり取り組んでいません。博士課程で従来のセキュリティを研究し始め、非常に低レベルのリターンプログラミングを行い、インテルでハードウェアレベルの防御に関する夏期インターンを経験しました。
その後すぐに機械学習を始めたので、ここ7-8年ほどは非常に伝統的なセキュリティには携わっていません。ただし、素晴らしいコミュニティだと思うので、システムセキュリティの会議には頻繁に参加しています。
類似点と相違点の1つは、システムセキュリティの人々は、自分たちが行っていることが非常に厳密なものであり、徹底的に適切に評価されていることを確認することに長けているということです。
これは論文の長さにも表れています。システムセキュリティの論文は2段組で13-14ページ、ICLRへの投稿論文は1段組で7-8ページ程度です。システムセキュリティの論文は、何が起きているのかを非常に詳しく説明することから始まり、結果も厳密であることが求められます。
一方、機械学習の論文は「新しいクールなアイデアがあります。たぶんうまくいきます」といった具合です。これは「早く動いて物事を壊す」という観点では良いのですが、体系的な研究には適していません。
システムセキュリティの論文を書いていた頃は、年に1.5-2本程度でしたが、今では同じレベルの厳密さで機械学習の論文を5-6本書くことができます。
これは私の考える最大の違いです。コミュニティによって意識的に選択されているのだと思います。そして、機械学習の分野では経験的にうまくいっています。
もし機械学習の全ての研究結果にシステム論文と同じレベルの厳密さが必要だったら、これまでの反復サイクルは全部で5回程度しかなかったでしょう。
機械学習の会議では、ある論文と、その論文を改良した論文、さらにそれを改良した論文が、全て同じ会議で発表されることがよくあります。最初の人がarXivに投稿し、次の人が改良を加え、3番目の人がさらに改良を加えるからです。
これは良いことです。分野が非常に新しい場合、完全な証拠がなくても人々が急いでアイデアを提案することを許容する必要があります。分野が成熟してくると、過去に30回も提案されたことを知らずに野放図な提案をする人がいないようにする必要があります。
2つのアプローチのバランスと組み合わせが有用だと思います。これが私の考える最大の違いです。
もし私に機械学習分野での差別的な優位性があるとすれば、その一部はここから来ているのかもしれません。システムの分野では、この種の厳密な思考と、攻撃を徹底的に行い、全ての細部を確認する方法について、かなり厳しく訓練されました。セキュリティを行う際にはこれが必要です。
この訓練は、機械学習の論文を書く際に、これらの細部を正しく理解するのに非常に有益でした。最近、ある防御を破る論文を書きましたが、それが破れた理由は、マイナス記号が間違った場所にあったからでした。
これは、コードについて一から理論的に考えて導き出せるような類の問題ではありません。もし誰かにアドバイスをしていたとしても、全てのマイナス記号をチェックするように言うのは難しいでしょう。
起こっていることを全て理解し、間違いのある箇所を1つ見つけ出して、たった1つの正しい方法でそれを破ることができるようにすべきです。
これが、私が考えるこれらのコミュニティ間の最大の違いかもしれません。
次の記事は「なぜAIを使うのか」というもので、数ヶ月前に書かれました。言語モデルを使用していて非常に有用だと感じており、プログラミングの生産性が約50%向上したと述べていましたね。私も同感です。具体的にどのようなタスクで生産性が向上したのか、まずそこから始めましょう。
私はこういったことを信じる人間ではありません。注目を集めることが仕事の人々もいます。彼らは物事を誇張することが仕事です。
私が気になっているのは、ビットコインが世界を変えると言っていた人々と同じ人々が、言語モデルが登場するとすぐに「言語モデルが世界を変える」「非常に有用だ」などと言い始めたことです。
遠くから見ていると、詐欺師たちが新しいものを見つけては同じことを繰り返しているように見えます。実際にそうです。彼らは世界で何が起きているのか理解していません。クリック数を稼ぐために新しいものを探しているだけです。
しかし同時に、現在のモデルは実際に有用だと思います。人々が言うほど多くのことに有用なわけではありませんが、特定のタイプの人々、つまりこれらのモデルで何が起きているのかを理解し、コードを書け、出力をレビューできる人々にとっては有用です。
私は誰にでも有用だと主張するつもりはありませんが、私にとって有用だという1つの事例として、もし私と似たようなバックグラウンドを持っている人がいれば、その人にも有用かもしれないと言いたかったのです。
セキュリティ系の人々から連絡があり、「書いてくれてありがとう。私にも有用でした」という声をもらいました。私の経験が他の人にも当てはまるかどうかはわかりません。それを理解することは私の仕事ではありません。
少なくとも私が言いたかったのは、私のような行動をする人々にとって有用だということです。
なぜ有用なのか。現在のモデルは、私が答えを求めている種類の質問、つまり「この関数を書いて」とか「これをやって」といった質問に対して、十分な性能を持っています。私はそれをチェックする方法を知っていますし、答えを得る方法も知っています。ただ、自分でやりたくないだけです。
最も有用な類推は、全てのプログラムをCやアセンブリで書かなければならないと想像してみることです。これによって今できることができなくなるわけではありません。本当に必要なら、全ての研究結果をPythonの代わりにCで実装することもできるでしょう。
ただし、それには時間がかかります。頭の中にアイデアがあって、例えば単純な二分探索を実装したいとします。Cでは、ポインタやメモリ割り当てなど、解決したい問題よりもはるかに低レベルの細かい部分について考える必要があります。
言語モデルが有用だと思うのは、解決したい問題を理解していて答えが正しいかどうかチェックできる場合、モデルに実装してもらいたいことを、あまり明確に定義されていない言葉で入力するだけで、答えを得られることです。
その答えが正しいかチェックしてコードに組み込み、実際に解決したい問題に取り組み続けることができます。全ての細かい部分を自分でタイプアウトする必要はありません。これが私が有用だと感じる最大の用途の1つです。
もう1つ有用な用途は、モデルが世界や様々なことについて膨大な知識を持っているという事実を活用できる場合です。基本を理解していても、あるAPIの使い方がわからない場合、モデルに動作するコードを作ってもらい、簡単にチェックできます。
また、特定の言語でコードを書く方法がわからない場合でも、モデルにコードを提供してもらえます。これまで見たことのない言語でも、基本的に何をしているのか理解できます。細部で間違いを犯すかもしれませんが、構文を知らないのでタイプできなかっただけです。
モデルは正しい構文を提供し、他の全てを処理することが得意です。そうすれば、残りの部分は自分で理解できます。
モデルに質問できなければ、言語の構文を学んで全てをタイプアウトするか、5年前の人々がやっていたように、Stack Overflowから他の人のコードをコピー&ペーストして注釈を付ける必要があります。これは、単にモデルに質問するよりも明らかに劣る方法です。
なぜなら、何も知らない自分がコピー&ペーストに頼ることになるからです。これが、このような問題に対する私の見方です。抽象的な理解さえあれば、現在のモデルは十分に有用です。これは、なぜ賢い人ほど言語モデルから多くを引き出せるのかを説明しています。
時間とともにあなたの使い方はどのように進化し、どのような方法論を持っているのでしょうか。個人的には、具体性が重要だと知っています。ソース資料に当たり、自分の理解とプロセスをプロンプトに組み込むことですが、あなたはどのように考えていますか?
私は、うまくいく合理的な確率があると思われる質問をするようにしています。時間の無駄になりそうな質問はしません。50%の確率でうまくいきそうだと思えば、まずモデルに質問します。
その出力を見て、方向性が正しそうかどうかを確認します。解決策に近づきそうだと感じたら、もう少し反復するかもしれません。最初から完璧な解決策が得られた場合は素晴らしいことです。
モデルがその種の問題に対して良くないことがわかれば、次回からはその質問をしないようになります。モデルから何も有用なことを引き出せないと言う人々もいますが、モデルがその特定の問題に対して本当に不得意なのかもしれませんし、モデルができることをまだ十分に理解していないだけかもしれません。
今日の多くの人々は、Googleの検索の使い方をどれだけ学ばなければならなかったかを忘れています。何かを検索するように言われたら、暗黙のうちに、答えに含まれる単語を使うべきで、質問の形式で入力すべきではないことを知っています。
検索エンジンで正しい答えを確実に見つけるには、入力の仕方に一定のスキルと理解が必要です。言語モデルも同じです。自然言語インターフェースを持っているので、技術的には何でも入力できますが、より有用な方法もあります。
これをスキルとして教える方法はわかりませんが、ただ試してみて、もしかしたらあなたのタスクには適していないかもしれず、その場合は使わないようにすればいいと言うしかありません。
うまく活用できれば、これは無料の生産性向上につながります。ただし、これらのモデルで実際に何が起きているのかについて、ある程度理解している必要があります。
理解していない人々がいて、同じようなことを試みようとしますが、何か学べるのか、バグが発生したときにそれを見つけられるのか、など様々な問題が心配です。
しかし、仕事を成し遂げたい実践者にとって、PythonよりもCを使う必要があると言わないのと同じように、PythonだけでなくPythonと言語モデルを組み合わせて使う必要があると言うつもりはありません。
はい、怠惰と黙認は問題です。雰囲気と直感は非常に重要です。私は自分をLLMを使うジェダイだと考えていますが、時々イライラします。人々に「LLMを使えばいい」と言うと、私は他の人々よりもLLMから多くを引き出せているようですが、なぜそうなのかはよくわかりません。プロンプトする対象を理解しているからかもしれませんが、私たちが学ぶ必要のあるものだと思います。
新しいツールが登場するたびに、時間をかける必要があります。「本物のプログラマーはCでコードを書き、高水準言語では書かない」「ガベージコレクターを信頼するなんて」「本物のプログラマーは自分でメモリを管理する」「本物のプログラマーは自分でPythonを書く」「なぜ言語モデルが出力する正しいコードを信頼するのか」「本物のプログラマーはAPIを理解していてリファレンスマニュアルを見る必要はない」といった声を覚えています。
ここでも同じような類推ができます。ツールが変化して、特定の状況でより生産的になれる可能性があるなら、新しいツールを検討する意欲を持つべきです。
私はいつもこれを合理化しようとしています。プロンプトを書く人の目に知性があるのかどうかという概念に帰着します。それは重要なのでしょうか。これは、私が他の人々とは異なる使い方をしている理由かもしれません。
その機能は私をより生産的にし、私のためにタスクを解決してくれます。私が知性を注入したのでしょうか。多くの場合、答えはノーだと思います。一部の場合はイエスかもしれません。しかし、私はそのような見方はしません。私が望む質問を私にとって有用な方法で解決してくれているかどうかを見ています。ここでは答えは間違いなくイエスですが、これを何か現実的な方法で答える方法はわかりません。
セキュリティ研究者として、それはLLMの使い方にどのように影響していますか?
ええ、これが物事を理解せずにモデルを使う人々について心配している理由です。暗号化関数を書いてくれと頼むと、本来なら「それはすべきではありません。このAPIを呼び出すべきです」という答えが正しいはずです。
しかし、しばしば「暗号化関数を書きたいのですね、はい、ここに答えがあります」と言って、誰もが通常書いてしまうようなバグを全て含んだ関数を提供します。これは恐ろしいことです。
同じことは、データベースへのn回の呼び出しを書いていた時にも起こりました。モデルは何をしたかというと、SQLインジェクションに対して脆弱なコードを書きました。これは恐ろしいことです。
注意深くない人はこれに気付かず、多くの深刻なバグを導入することになります。プログラミングにある程度の能力があれば、モデルの出力を読んでこれらの間違いを修正することができます。SQLインジェクションを修正し、文字列の連結をテンプレートに置き換えるのは難しくありません。モデルは単に正しく実装しなかっただけです。
そのため、これを行わない人々について非常に心配しています。注意深くない人々が言語モデルを使用すると、非常に安全性の低いコードを書くことを示す論文がいくつかあります。これは懸念事項です。
言語モデルを使用する場合の方が、使用しない場合よりも差別的に脆弱になる可能性があるように見えます。これは大きな懸念です。
私がこの有用性の問題について考える理由の1つは、人々が実際に使用するもののセキュリティが重要だからです。人々が実際に何をするのかを知り、それに関する論文を書いて研究できるようにしたいと考えています。
モデルが私の問題を解決できるかどうかと、答えがイエスであることが多い言語モデルの使用を区別することが重要だと感じています。一般的なケースで正しい答えを提供するからです。
ほとんどの人々はセキュリティの問題を気にせず、新しいことができるようになったからという理由で、セキュリティの部分を理解せずにそれを使用します。
つまり、私たちはセキュリティに取り組み、人々がこれらのものを使用することがわかっているので、正しく使用できるようにセキュリティを確保する必要があります。
私は、人々が次に何をするのかという最前線にあるものをよく使おうとします。彼らの考え方を理解し、これを理解するためです。これは私をかなり心配させます。ここで物事が非常に悪い方向に向かう可能性があるからです。
LLMの出力をどのようにして、いつ検証しているのでしょうか?
Stack Overflowの半分は間違っているのと同じ方法です。これは他の人が指摘することですが、モデルが間違っている可能性があると言います。しかし、長年プログラミングをしていれば、間違ったコードを読むことに慣れています。
Stack Overflowの関数をコピー&ペーストして、それが正しいと想定することはありません。なぜなら、その人は私が尋ねた質問とは異なる質問をしていたかもしれないからです。
言語モデルのコード出力を検証する際、他の人が書いたオンラインのコードを検証する時と大きく異なることはしていないと感じています。
唯一の違いは、モデルをより頻繁に使用しているので、より注意深くなければならないということかもしれません。何かを2倍使用すれば、バグを見つける確率も2倍になるので、より注意深くなる必要があります。
特に異なることをしているとは感じません。物事が正しい答えを与えてくれると信頼せず、95%の解決策は依然として95%の解決策だということを理解することです。
そのものを受け取り、望んでいたことのほとんどを実行し、その能力は最大限に発揮されました。あなたは知的な人なので、最後の5%を完了させ、問題を修正すれば、20倍のパフォーマンス向上を得ることができます。
ここで非常に興味深いことに触れましたね。実際、私たちのほとんどは常に間違っています。だからこそ、少なくとも1人の非常に賢い友人を持つことが重要です。彼らは常にあなたの物事が間違っている全ての方法を指摘してくれるからです。
ほとんどのコードは間違っています。あなたの仕事は物事がどのように間違っているかを指摘することです。私たちは常に知らず知らずのうちに、間違いの境界線上にいるのです。それが世界の仕組みなのです。
はい、言語モデルによって間違いの量が大幅に増える可能性があると思います。言語モデルで非常に悪い方向に向かう可能性のある事柄がたくさんあります。
以前は、悪いコードを書ける量は、ソフトウェアを書ける人間の数に限られていました。なぜなら、ソフトウェアを書ける人の数には限りがあり、少なくともある程度のトレーニングが必要だったからです。
私が心配しているもう1つのことは、モデルがあなたの全ての問題を解決できると言う人々を見て、10倍のコードが生まれることです。
これは1つの観点からは素晴らしいことです。世界中の誰もが、自分の特定の問題を解決するために必要なソフトウェアを書けるというのは素晴らしいことではありませんか。
しかし同時に、セキュリティの専門家である私は、おそらく非常に安全性の低い10倍のものが存在することについて、少し怖くなります。
10倍のセキュリティ専門家がいるわけではないので、これら全てを研究することはできません。将来的には大幅な増加が見込まれ、これは私が心配している多くのことの1つです。
これが、人々がこれらのことを試みそうかどうかを理解するために、これらのものを使用する理由の1つです。現時点では答えはイエスのように思えます。これは私を心配させます。
昨日、Googleの人々と話をしました。彼らはLLMの失敗モードについて研究していて、人々が知らない本当にクレイジーなことがたくさんあります。例えば、ソフトマックスと位相幾何学的表現の圧縮のために、コピーができない、数を数えられないなど、できないことがたくさんあります。
あなたの経験では、LLMが本当に苦手なタスクに気付いたことはありますか?
きっとたくさんあると思いますが、私はそのような質問をしないように学んでいます。だから、具体的な例を挙げるのは難しいです。
検索エンジンが不得意なことは何かと同じように、検索エンジンが完全に間違った答えになる事柄は100万個あると確信していますが、今すぐその質問に答えようとすると少し難しいでしょう。なぜなら、それらが得意なことのために使用する方法を身につけているからです。
はい、ある意味で正確さが必要な場合、モデルはそのためのものではありません。
特に不得意な具体的なタスクについて言えば、もちろん、プログラムを書くのに20分以上かかるようなものは、モデルには実装できないでしょう。
しかし、これが問題なのは、これが変化しているということです。私が難しいと思っていたことが、より簡単になっています。
関係のない理由で必要だった、難しい動的プログラミングの問題がありました。最初に解くのに2-3時間かかりました。
数日前にClaude 4.o1がリリースされましたが、その問題をClaude 4.o1に与えたところ、2分で私が書いたものの10倍速い実装を提供してくれました。
参照解を持っているのでテストできましたし、正しかったです。これで学んだのは、以前なら「これは私にとって十分に難しいアルゴリズムの問題だったので、モデルに解かせることは決してないだろう」と思っていたことが、今ではできるということです。
しかし、私にとっては些細に思えることでも、モデルが間違えることもあります。ただし、私はそのような質問をほとんどしなくなりました。
これが、先ほど心配していた理由に戻りますが、人々が答えが正しいか間違っているかをチェックする経験を持っていないことを心配しています。彼らは単に間違った答えを可能な限り多く適用するでしょう。それは懸念すべきことのように思えます。
これは人間化のプロセスの一部です。私たちには雰囲気や直感があり、実際に知っており、失敗モードの長いテールを回避することを学んできました。私たちは言語モデルの監督された使用でそれを滑らかにしています。驚くべきことに、私たちはそれを意識的に認識していないようです。
しかし、プログラマーは常にこれを行っています。例えば、Rustを書く人がいるとします。Rustは非常に奇妙なメモリモデルを持っています。Rustを非常に上手に書く人は、このような奇妙なメモリモデルによる問題に遭遇しないように、プログラムを異なる方法で構造化します。
しかし、私のように Rustにあまり詳しくない人が、Rustを使おうとしてコードを書こうとすると、借用チェッカーに延々と怒られて、プログラムを書くことができません。
Rustを見て「これは非常に良いものになる可能性があると思うが、コードを正しく書く方法がわからない」と思います。十分な経験がないからです。
慈悲深くない見方をすれば、「なぜ誰かがこれを使うのか。CコードをRustで書くのは不可能だ。素晴らしい保証があるはずなのに」と言うでしょう。しかし、コードの書き方を変える必要があります。考え方を変えれば、問題は全て消えます。
パラダイムで動作すべき方法を受け入れれば、素晴らしいことは全てできます。これと同じような類推が、ここでのいくつかのことにも当てはまります。
モデルは特定の方法では非常に不得意で、あなたはそれを人間だと想像して、他の人に尋ねるような質問をしようとしています。しかし、そうではありません。
正しい方法で、正しい種類の質問をする必要があり、そうすれば価値を得ることができます。これを行わなければ、スーパーインテリジェンスではないので、非常に失望することになります。
ベンチマークについてどう思いますか?
はい、これについて考えがあります。これが言語モデルの問題です。以前は、ベンチマークが非常に簡単でした。モデルに正確に1つのタスクを解決してほしいと考えていたからです。そのタスクで測定し、タスクを解決できるかどうかを確認すれば、答えはイエスでした。素晴らしい、解決できました。
しかし、この問題は、そのタスクが私たちが本当に気にしていたタスクではなかったということです。これが、ImageNetモデルが実際の問題を解決するために実世界に出ることがなかった理由です。
200種類の犬の品種を分類することに、誰も興味がないからです。モデルはこれが得意かもしれませんが、これは私たちが本当に望んでいるものではありません。私たちは異なるものを望んでいます。
当時、ImageNetモデルが実世界で私が気にする実際のタスクを解決できないと言うのは馬鹿げていたでしょう。もちろん、そのためにトレーニングされていなかったのですから。
言語モデルについて、それらをトレーニングする人々が主張することは、「任意のタスクを解決できる1つの汎用モデルをトレーニングする」ということです。そして、いくつかの小さなタスクでテストし、「見てください、これらのタスクをうまく解決できるので良いモデルです」と言います。
ここでの課題は、これらのタスクの1つについて特にトレーニングされたモデルを作れば、おそらく非常に良いスコアを得られるということです。
課題は、モデルをトレーニングした人がこれを行っていないことを望むということです。彼らには単に良いモデルをトレーニングし、初期のトレーニング目的とは完全に独立した、モデルを評価できるタスクとしてこれを使用してほしいのです。
これにより、モデルがどれだけうまく機能するかについて、偏りのない見方を得ることができます。しかし、モデルをトレーニングする人々は、ベンチマークでうまく機能するようにインセンティブを与えられています。
古い世界では、私は研究者が不正をしないと信頼しています。例えば、ImageNetのテスト精度を最大化したいとします。原理的には、テストセットでトレーニングすることもできましたが、これは実際の不正行為です。テストセットでトレーニングしてはいけません。
しかし、言語モデルを与えられ、例えばコーディングについて評価したいとします。ひどいベンチマークですがHumanEvalを使用するとか、MLUを使用するとか、MMUを使用するとか、どんな悪いケースでもいいですが。
これらのテストセットで実際にトレーニングしないかもしれませんが、これらのベンチマークで特に良好な性能を発揮するようにモデルをトレーニングする可能性があります。
そうすると、一般的にはあまり能力のないモデルでも、人々が使用する特定の20のベンチマークでは素晴らしい性能を発揮する可能性があります。
これは誰もがやりたがることです。ベンチマークで最高のスコアを獲得したいからです。私は、もっと多くのベンチマークがある世界にいたいと思います。
そうすれば、これは簡単にできないことであり、これらのモデルが正しい答えを与えてくれることや、モデルトレーナーによって設計されたスコアを最大化するのではなく、何らかの方法で彼らのスキルレベルを正確に反映していることをより信頼できるようになります。
現在、ハイパースケーラーはベンチマークに信じられないほどの労力を注いでいます。そして今、私たちはテスト時の推論、テスト時のアクティブファインチューニング、ファインチューニング、量子化、フラグメント化などの世界に移行しています。
実用的な意味で、これを行う多くの人々は同じ方法でベンチマークを行うことができません。これをどのように見ていますか?
わかりません。量子化などを行っているなら、頑張ってください。非常に難しいように思えます。これらのものをテストするには、平均的なベンチマークを使用して最善を尽くすしかありません。
私がより心配しているのは、特定のタスクでより良くなることを示すために、積極的にモデルをファインチューニングしている人々です。
例えば、Llamaの多くのファインチューニングがあり、より良いと主張されています。彼らはベンチマークの数値を全て示しますが、実際には特定のタスクで良好な性能を発揮するようにモデルをトレーニングしただけで、他の質問をすると本当に良くないということが判明します。
これが私がより心配していることです。他のケースについては、わかりません。これは難しいと同意しますが、ここでは良い解決策を持っていません。
それは大丈夫です。実際の論文の1つについて話す前にあなたを見送ることはできません。これは素晴らしい一般的な話でしたが、7月の「本番環境の言語モデルの一部を盗む」という論文を選びました。それについて少し高度な説明をしていただけますか?
非常に長い間、セキュリティの論文で行っていたことは、モデルが将来的にどのように使用されるかについて仮説を立て、「おそらく特定の種類の攻撃が可能だ、これが何か悪いことが起こる可能性のある理論的な設定で示そう」と考えることでした。
モデル盗難と呼ばれる研究があり、「誰かがあなたのモデルを取り、APIへの標準的なクエリだけで、そのコピーを盗むことができるか」という質問に答えようとしています。
これは2016年にFlorian TrerらによってLINEARモデルのAPIで始められ、その後、深層ニューラルネットワークで研究され始めました。他の多くの人々による一連の論文があり、2020年に私たちはCryptoに論文を提出しました。
そこで、「モデルの正確なコピーを盗む方法がここにある。あなたが持っているモデルが何であれ、正確なコピーを取得できる」と述べました。ただし、長いリストの仮定があります。
ReLU活性化関数のみを使用していること、全てが浮動小数点64で評価されること、浮動小数点64の値を入力できること、浮動小数点64の値を出力として見ることができること、モデルは完全接続のみであること、深さが3以下であること、任意の層の幅が32ユニット以下であることなど、実践では決して真とならない長いリストです。
しかし、これは非常にクールな理論的な結果です。このような種類の論文は他にもあり、モデルの正確なコピーを盗む方法を示していますが、それは本当に人為的な設定でのみ機能します。
これが、私たちがその論文をCryptoに提出した理由です。彼らは多くの方法で即座に実用的ではないが、非常にクールな理論的な結果を持っているからです。
その後、この研究は継続され、拡張されました。私が答えたかった質問は、「今、私たちは言語モデルを持っていて、仮定のリストを挙げると、それらは全て偽である」ということです。
ReLU活性化関数だけではなく、完全接続だけでもなく、浮動小数点64の入力を送ることができず、浮動小数点64の出力を見ることができず、ニューロンは500ではなく10億個であるなど、全ての仮定が偽です。
そこで、「実際のAPIで実装できる最高の攻撃は何か」という質問に答えたいと思いました。これが私たちが試みたことです。最も実際のAPIに対して機能する最高の攻撃を考え出そうとしました。
私たちはOpenAIのAPIといくつかの他の企業を見ました。Googleも同じような機能を持っていました。APIの設定方法のおかげで、出力をある程度制御できました。これにより、モデルの1つの層を盗むための高度な数学を行うことができました。
モデルの層の中で、おそらく最も興味深くない層です。非常に少量のデータですが、モデルの1つの層を実際に回復することができます。
その意味で、実際にできるという点で現実的です。また、層を正しく持っているという意味でも現実的です。しかし、それは全てではありません。
この論文で主張しようとしたのは、2つの研究の方向性を同時に追求すべきだということです。
1つは、理論的な意味では真だが、実際のシステムには実装できず、予見可能な将来においても実装できそうにない種類の結果を持つ論文を書くことです。
もう1つは、今日のほとんどのセキュリティ研究者が行っているように、システムが実際にデプロイされている状態を見て、「このシステムが存在する状態で、実際にモデルにどのような種類の攻撃を実行できるか」という質問に答え、その部分について論文を書くことです。
モデルの最後の層で何ができるかはわかりません。いくつかできることがあります。1つは、これがモデルの幅を教えてくれることです。これは人々が開示していないことです。
私たちの論文には、GPT-3のADAとBabbageモデルの幅についての最初の公式確認が含まれていると思います。これはOpenAIが公に述べたことのないものです。
GPT-3の論文には、論文で数モデルの幅が記載されていましたが、ADAとBabbageのサイズについては直接述べられていませんでした。人々は推測していましたが、私たちは実際にそれを書き記し、確認することができました。
また、論文の一部として、GPT-3.5に対して攻撃を実行し、最後の層を正しく盗みました。私はモデルのサイズを知っており、それは正しいです。
冒頭で話した責任ある開示について、私たちは事前に彼らと合意しました。これは、GoogleとOpenAIの両方の弁護士と話をするのは面白い会話でした。
「あなたのモデルを盗みたいのですが、よろしいでしょうか?」とお願いしました。OpenAIの人々はとても親切で「はい」と言ってくれました。
Googleの弁護士も最初は非常に…「OpenAIのデータを盗みたい」というのに対して「いかなる状況でも」と言っていましたが、「OpenAIの法務部長が同意してくれれば大丈夫ですか?」と言うと、彼らは「いいですよ」と言ってくれました。
私たちは隔離されたVMで全てを実行し、データを破棄しました。しかし、合意の一部として、私たちが正しいことを行ったことを確認してもらいましたが、実際に盗んだデータをリリースしないように求められました。これは理にかなっています。攻撃が機能することを示したいですが、盗んだものを実際にリリースはしません。
そこで、世界中でGPT-3.5がどれくらいの大きさなのかを知っている人々のリストを書き出すと、OpenAIの現在および元従業員と私が含まれます。
これは非常に現実的な攻撃です。なぜなら、これをどのように学ぶ他の方法があるでしょうか? 他の方法は、OpenAIのサーバーをハッキングしてこれを学ぼうとするか、従業員の1人を脅迫するか、実際の機械学習の攻撃を行って、これらのモデルのサイズと最後の層を回復することです。
これが、この論文を書きたかった動機です。例を示し、他の人々が攻撃を示すことを奨励したかったのです。全ての問題を解決しなくても、この意味でより現実的なものにしていくことができます。
これは、より多くの設定にシステムがデプロイされ始めるにつれて、より多く見る必要があると思うことの1つです。
これが論文を書いた理由です。技術的な方法について話したいかもしれませんが、それは…
はい、お願いします。
はい、2分ほどお時間をいただいて、線形代数の知識があることを前提にお話しさせてください。もしそうでない場合は申し訳ありませんが、理解できる方法で説明しようと思います。
モデルの仕組みは、一連の層を持っていて、各層は前の層の変換です。層にはいくつかのサイズ、つまり幅があります。
モデルの最後の層は、小さな次元から大きな次元への変換であることがわかりました。例えば、これらのモデルの内部次元は2048程度で、出力次元は語彙の中のトークン数で、これは50,000程度です。
つまり、出力のベクトルを見ると、50,000次元の巨大な空間にあるにもかかわらず、それは線形変換であるため、実際にはこの2,000次元の部分空間にしかありません。
これは、この空間を見ると、特異値分解と呼ばれるものを計算して、この大きな空間にどのように埋め込まれていたかを実際に回復できることを意味します。
非ゼロの特異値の数がモデルのサイズを直接教えてくれます。これは難しい数学ではありません。最後に使ったのは学部の数学の時でした。
しかし、詳細を詰めると、うまくいきます。これは、非常に素晴らしい数学のいくつかの応用例です。
この詳細が好きな理由の1つは、これは1つの分野の専門家を必要としないような種類のものだからです。学部レベルの線形代数の知識があれば、誰にでも説明できます。
しかし、その人である必要があり、言語モデルがどのように機能するかを理解する必要があり、セキュリティについても考える必要があり、実際のAPIが提供するものについても考える必要があります。
標準的なものは取得できないからです。全ての部分について考える必要があります。これが私がこの論文を興味深いと思う理由です。
これがセキュリティの人が行うことです。何か1つのことをはるかに深く見ることもありますが、ほとんどの場合、これらの攻撃がどのように起こるかは、非常に幅広い知識を持ち、APIの詳細が特定の言語モデルのアーキテクチャとどのように相互作用するかを、線形代数のテクニックを使用して見ることです。
これらの部分のどれか1つでも欠けていれば、この攻撃が可能だとはわからなかったでしょう。だからこそ、OpenAIはこれを3年間持っていたのに、他の誰も最初に見つけなかったのです。
彼らはこの種のことを探していなかったのです。このような脆弱性は偶然には見つかりません。人々が実際に探す必要があります。
そして、先ほど話した責任ある開示について、私たちは90日の修正期間を与えました。彼らは修正し、Googleも修正し、名前を挙げないように求めた他のいくつかの企業も修正しました。それはうまくいきました。
それは楽しい論文を書く経験でした。
素晴らしい。Nicholas Carlini、今日は私たちに時間を割いてくださり、ありがとうございました。あなたをお迎えできて光栄でした。
ありがとうございました。
コメント