AIはこの境界線を越えられへん、せやけどその理由は分からへんねん

11,093 文字

YouTube
作成した動画を友だち、家族、世界中の人たちと共有

AIモデルを訓練すると、エラー率はすぐに下がって、そのあと落ち着くんやけど、もっと大きなモデルを訓練したら、エラー率はもっと下がるんや。でも、そのためにはもっとたくさんの計算力が必要になんねん。
どんどん大きなモデルにしていくと、こんな感じの曲線の家族ができてくんねん。軸を対数スケールに変えたら、はっきりした傾向が見えてくるわ。どのモデルもこの線を越えられへんのや。この線のことを「計算最適」とか「計算効率」のフロンティアって呼んでるんやで。
この傾向は、三つのニューラルスケーリング則の一つなんや。エラー率は、計算力、モデルサイズ、データセットサイズと非常によく似た形でスケールするんやけど、面白いことに、モデルのアーキテクチャとか他のアルゴリズムの詳細にはあんまり左右されへんのや。そこそこええ選択をしとけばな。
ここからの興味深い質問は、私らが自然の基本法則みたいなもんを発見したんかってことやな。理想気体の法則みたいに、知的システムを作るための法則やねん。それとも、これは今やってるニューラルネットワーク主導のAIアプローチの一時的な結果なんかな。
さて、データ量、モデルサイズ、計算力をどんどん増やし続けたら、これらのモデルはどれだけパワフルになれるんやろ?エラーをゼロにできるんか、それとも性能は頭打ちになんのか?なんでデータ、モデルサイズ、計算力がこのシステムの根本的な限界になってんのか、そしてなんでこれらがこんな単純な形でモデルの性能とつながってんのか?
2020年はOpenAIにとって画期的な年やったんや。1月にチームが論文を発表して、言語モデルの広範囲なスケールで非常にはっきりした性能の傾向を示したんやで。チームは各結果セットにべき乗則の方程式をフィットさせて、計算力、データセットサイズ、モデルサイズに対する性能のスケーリングを正確に推定したんや。
対数プロットでは、これらのべき乗則の方程式は直線として現れるんやで。各直線の傾きは、フィットした方程式の指数に等しいんや。指数が大きいほど直線は急になって、性能の改善も急激になるわけや。チームは、上限でこの傾向から外れる兆候を観察せんかったんや。これはOpenAIのその年の戦略を予感させるもんやったな。
当時チームがテストした最大のモデルは、15億の学習可能なパラメータを持っていて、訓練には約10ペタフロップ日の計算力が必要やったんや。ペタフロップ日というのは、1秒間に1000兆回の浮動小数点演算ができるシステムが1日でできる計算の数のことやな。当時の最高級GPUであるNVIDIA V100は、約30テラフロップの性能を持ってたんや。つまり、33台のこの1万ドルのGPUを使えば、約1ペタフロップの計算力が得られるわけやな。
その夏、チームの経験的な予測が実現したんや。GPT-3のリリースでな。OpenAIチームは、スケールに大きな賭けをしたんや。Microsoftと提携して、33台どころか1万台ものV100 GPUを搭載した巨大なスーパーコンピューターを作ったんやで。そして、1750億パラメータの超巨大なGPT-3モデルを、3640ペタフロップ日の計算力を使って訓練したんや。
GPT-3の性能は、1月に予測した傾向線にかなり近かったんやけど、頭打ちにはならんかったんや。これは、もっと大きなモデルでさらに性能が向上する可能性を示してたんやな。巨大なGPT-3がニューラルスケーリングの限界に達してへんかったとしたら、その限界はどこにあるんやろ?十分な計算力、データ、モデルサイズがあれば、エラー率をゼロにすることは可能なんやろうか?
10月の論文で、OpenAIチームはスケーリングについてもっと深く調べたんや。チームは、画像やビデオのモデリングを含む様々な問題で、同じような明確なスケーリング則を見つけたんやで。また、これらの他の問題のいくつかでは、スケーリングの傾向が最終的に平らになることも見つけたんや。でも、エラーがゼロになる前にな。
これは、エラー率が何を測ってるかを考えたら理解できるんや。GPT-3のような大規模な言語モデルは自己回帰的やねん。つまり、前に来る単語の関数として、次の単語や単語の断片を予測するように訓練されてんねん。これらの予測は一般的に確率のベクトルの形を取るんや。
例えば、ある入力単語のシーケンスに対して、言語モデルは0から1の間の値のベクトルを出力するんや。各エントリーは、その語彙の特定の単語の確率に対応してんねん。これらのベクトルは通常、ソフトマックス演算を使って正規化されて、全ての確率の合計が1になるようにしてんねん。
GPT-3の語彙サイズは50,257やから、「アインシュタインの名前は」というテキストのシーケンスを入力したら、モデルは長さ50,257のベクトルを返すんや。そして、このベクトルは「アルバート」に対応するインデックス(ちなみに42,590やで)以外のところではほぼゼロに近くなると予想されるんやな。
訓練中は、訓練してるテキストの中で次の単語が何かを知ってるから、モデルがどれだけうまくやってるかを測るエラーや損失の値を計算できるんや。この損失値は非常に重要やねん。モデルのパラメータの最適化や学習を導くからな。全てのペタフロップの訓練は、この損失の数値を下げるために行われてんねん。
アインシュタインの例では、正しい出力ベクトルはインデックス42,590のところに1があるはずやから、損失値を1からモデルがこのインデックスで返した確率を引いたものとして定義できるんや。モデルが100%確信を持って答えが「アルバート」やと返したら、損失はゼロになるわけや。これは理にかなってるな。モデルが0.9の値を返したら、損失は0.1になるんや。この例でモデルが0.8の値を返したら、損失は0.2になるわけやな。
この定式化はL1損失と呼ばれるものと同じで、多くの機械学習の問題でうまく機能するんやけど、実際には、クロスエントロピーと呼ばれる別の損失関数の定式化を使うとモデルの性能がより良くなることがわかってんねん。クロスエントロピーの理論的な動機付けはちょっと複雑やけど、実装は簡単や。
正解のインデックスでモデルが出力した確率の自然対数の負の値を取るだけでええんや。だから、アインシュタインの例でクロスエントロピー損失を計算するには、インデックス42,590でモデルが出力した確率の負の自然対数を取るだけやねん。
モデルが100%確信を持ってたら、クロスエントロピー損失は1の自然対数の負の値、つまりゼロになるんや。これは理にかなってるし、L1損失とも一致するな。モデルが正解に90%の確信を持ってたら、クロスエントロピー損失は0.9の自然対数の負の値、つまり約0.1になるんや。これもL1損失に近いな。
モデルの出力確率の関数としてクロスエントロピー損失をプロットすると、損失はゆっくり増加して、モデルの正しい単語の確率がゼロに近づくと急激に上昇するのがわかるんや。つまり、モデルの正解に対する確信度が非常に低い場合、クロスエントロピー損失は非常に高くなるんやな。
これまで見てきたスケーリング図のY軸に示されてるモデルの性能は、モデルのテストセットの例に対するこのクロスエントロピー損失の平均やねん。テストセットの正しい次の単語についてモデルの確信度が高いほど、平均クロスエントロピーはゼロに近づくんや。
さて、OpenAIチームの損失曲線のいくつかがゼロに達せずに平らになったのが理にかなってる理由は、このようなシーケンスの次の要素を予測することには、一般的に単一の正解がないからなんや。「アインシュタインの名前は」というシーケンスの次の単語は非常に曖昧性が低いけど、ほとんどのテキストではそうじゃないんやで。
GPT-3の訓練データの大部分は、インターネットからスクレイピングしたテキストから来てるんや。「ニューラルネットワークは」というフレーズを検索したら、様々なソースから多くの異なる次の単語が見つかるやろ。これらの単語のどれも間違いじゃないんや。ニューラルネットワークを説明する方法がたくさんあるだけやねん。
この根本的な不確実性は、自然言語のエントロピーと呼ばれてるんや。言語モデルに期待できる最善のことは、次の単語の選択肢として現実的な一連の単語に高い確率を与えることやねん。そして驚くべきことに、大規模な言語モデルはこれを実際にやってのけてるんや。例えば、これがMetaのLlamaモデルのトップ5の選択肢やで。
だから、クロスエントロピー損失をゼロにすることはできへんけど、どれだけ近づけられるんやろか?自然言語のエントロピーの値を計算したり推定したりできるんやろうか?損失曲線に、定数の削減不可能な誤差項を含むべき乗モデルをフィットさせることで、OpenAIチームはデータ源の自然エントロピーを推定することができたんや。
各問題について、モデルサイズのスケーリング曲線が平らになる点を見ることで、そして計算曲線が平らになる点を見ることで、データの自然エントロピーを2つの方法で推定したんや。そして、これらの別々の推定値がよく一致することを見出したんやで。
スケーリングべき乗則はこれらの場合でもまだ機能してるけど、この定数項を追加することで、対数対数プロットの傾向線やフロンティアはもはや直線ではなくなるんやな。興味深いことに、チームは言語データでの性能の平坦化を検出できんかったんや。残念ながら、最大の言語モデルからのデータでさえ、自然言語のエントロピーの意味のある推定値を得ることはできへんかったんやで。
18か月後、Google DeepMindチームは一連の大規模なニューラルスケーリング実験を発表して、自然言語データの計算効率フロンティアにいくらかの曲率を観察したんや。彼らはその結果を使って、全体の損失を3つの項に分解するニューラルスケーリング則をフィットさせたんやで。モデルサイズでスケールする項、データセットサイズでスケールする項、そして最後に自然テキストのエントロピーを表す削減不可能な項やな。
これらの経験的な結果は、無限に大きなモデルと無限のデータを持っていても、巨大なテキストデータセットでの平均クロスエントロピー損失が1.69未満にはならないことを示唆してるんやで。
1年後の2023年3月14日、πの日にOpenAIチームはGPT-4をリリースしたんや。100ページにも及ぶGPT-4の技術報告書には、モデル自体についてのほとんど技術的な情報が含まれてへんねん。OpenAIチームは、競争環境と安全性への影響を理由に、この情報を共有せんかったんや。
しかし、論文には2つのスケーリングプロットが含まれてるんや。GPT-4の訓練コストは膨大で、報告によると1億ドルを優に超えてるらしいんや。この巨額の投資を行う前に、チームはもっと小規模な実験の結果を使って、同じ単純なべき乗則を使って性能がどうスケールするかを予測したんやで。
注意してほしいのは、これは線形のY軸スケールを使ってて、対数スケールじゃないってことや。これによって曲線の曲がり具合が誇張されてるんやな。この曲線を対数スケールにマッピングすると、いくらかの曲率は見られるけど、全体的には他のスケーリングプロットとよく一致してるんや。
ここで驚くべきなのは、OpenAIチームがこの巨大なスケールでも、GPT-4の性能をどれだけ正確に予測できたかってことやな。GPT-3の訓練には既に巨大な3,640ペタフロップ日が必要やったけど、GPT-4の訓練に関する漏洩情報によると、訓練の計算量は20万ペタフロップ日を超えてるらしいんや。これには25,000台のNVIDIA A100 GPUを3か月以上動かす必要があったらしいで。
これらのことから、ニューラルスケーリング則は信じられないほど広範囲のスケールで成り立ってるように見えるんや。OpenAIの最初の2020年の論文で報告された10のマイナス8乗ペタフロップ日から、GPT-4の訓練に漏洩した20万ペタフロップ日以上まで、13桁もの範囲やで。
これで最初の質問に戻るんやけど、なぜAIモデルの性能がこんな単純な法則に従うんやろか?なぜデータ、モデルサイズ、計算力がこのシステムの根本的な限界になってて、なぜこれらがこんな単純な形でモデルの性能とつながってるんやろか?
このような質問に答えるのに必要な深層学習理論は、一般的に深層学習の実践よりもかなり遅れてるんやけど、最近の研究では、モデルの性能がべき乗則に従ってスケールする理由について、説得力のある説明がなされてるんや。深層学習モデルが効果的にデータを使って高次元のデータ多様体を解像していると主張することでな。
これらの理論を本当に理解するのは難しいことがあるんや。多くの場合、段階的に直感を築いていくのが一番ええんやな。LLMやその他の幅広いトピックについての直感を築くには、この動画のスポンサーであるBrilliantをチェックしてみてな。
ニューラルスケーリングのような理論を理解しようとするとき、僕はまず論文から始めるけど、これだけじゃ十分じゃないんや。ほとんどの場合、何かをコーディングして実験して、何が本当に起こってるのかを見る必要があるんやな。Brilliantはこれを素晴らしい方法でやってくれるんや。強力な「やって学ぶ」パートに直接飛び込めるようにしてくれるんやで。
数学、プログラミング、データ分析、AIをカバーする何千もの対話型レッスンがあるんや。Brilliantは実際の問題を解くことで直感を養うのを助けてくれるんやで。これは僕にとって学習の重要な部分なんや。
数分後に、IMNISTデータセットの低次元表現を学習するニューラルネットワークのアニメーションが見られるんやけど、これみたいな大きな問題の小さなバージョンを解くのは、僕にとって素晴らしい直感を養う方法なんや。Brilliantはこのスタイルの学習を、1日数分で進歩できる形式にまとめてくれてるんやで。
一貫した努力で積み重ねられる進歩に驚くはずやで。Brilliantには大規模言語モデルに関する完全なコースがあって、次の単語を予測したり単語の確率を計算したりする方法など、先ほど触れたトピックをより深く掘り下げるレッスンも含まれてるんやで。
Brilliantの大規模言語モデルコースと他の全てのコースを30日間無料で試すには、brilliant.org/Welchlabsにアクセスするか、この動画の説明欄にあるリンクをクリックしてな。このリンクを使えば、Brilliantの年間プレミアムサブスクリプションが20%オフになるんやで。Brilliantにこの動画のスポンサーになってもらって、本当にありがとうな。
さて、ニューラルスケーリングの話に戻ろか。機械学習には、モデルが学習するデータセットが高次元空間の多様体上に存在するという考え方があるんや。画像やテキストのような自然データを、この高次元空間の点として考えることができるんやな。
例えば、手書き数字のIMNISTデータセットでは、各画像は28×28ピクセルのグリッドで構成されてて、各ピクセルの強度は0から1の間の数値として保存されてるんや。ちょっと想像してみてな。画像が2ピクセルしかないとしたら、これらの2ピクセル画像を2次元空間の点として視覚化できるんやで。最初のピクセルの強度値がx座標で、2番目のピクセルの強度値がy座標やねん。
2つの白いピクセルで作られた画像は、この2次元空間の(0,0)に落ちるんや。最初の位置に黒いピクセル、2番目の位置に白いピクセルがある画像は(1,0)に落ちるんやな。両方のピクセルがグレー値0.4の画像は(0.4,0.4)に落ちるわけや。
画像が2ピクセルじゃなくて3ピクセルやったとしても、同じアプローチが使えるんや。ただし、今度は3次元になるけどな。これを28×28のIMNIST画像にスケールアップすると、画像は784次元の空間の点になるんやで。
この高次元空間のほとんどの点は手書きの数字じゃないんや。これは、空間からランダムに点を選んで画像として表示してみるとわかるんやで。これらはほとんどの場合、ただのランダムなノイズにしか見えへんのや。手書きの数字をランダムにサンプリングするには、本当に本当に運が良くないとあかんのやな。
この疎性は、この784次元空間に埋め込まれた何か低次元の形状があるかもしれないことを示唆してるんや。この形状の上や中のすべての点が、有効な手書き数字になるんやな。
おもちゃの3ピクセル画像の例に戻ってみよか。3番目のピクセル強度値(X3と呼ぼう)が常に1+cos(X2)に等しいと学習したとするやろ。この場合、全ての3ピクセル画像は、X3 = 1 + cos(X2)で定義される3次元空間の曲面上に位置することになるんや。この面は2次元やねん。3次元空間での画像の位置は、X1とX2だけを使って捉えることができるんや。もはやX3は必要ないんやな。
IMNISTを分類することを学習するニューラルネットワークは、似たような方法で動作してると考えることができるんや。例えば、このネットワークアーキテクチャでは、最後から2番目の層に16個のニューロンがあるんやけど、これはネットワークが784次元の入力空間を、はるかに低い16次元の空間にマッピングしたってことなんや。これは、1+cos関数が3次元空間を低い2次元空間にマッピングしたのとよく似てるんやな。
多様体仮説が本当に面白くなるのは、多様体が単にデータの低次元表現ってだけじゃないってところなんや。多様体の幾何学がしばしばデータに関する情報をエンコードしてるんやで。
ニューラルネットワークが学習したIMNISTデータセットの16次元表現を取って、UMAPのような技術を使って16次元から2次元に投影すると、その幾何学の感覚をつかむことができるんや。UMAPは高次元空間の構造を保持しようとするんやで。各点を対応する数字の画像で色分けすると、ネットワークが訓練されるにつれて、つまり効果的に多様体の形を学習するにつれて、同じ数字のインスタンスが多様体上の小さな近傍にグループ化されるのが見えるんやな。
これは多くの機械学習問題で見られる共通の現象なんや。似たオブジェクトを示す画像や似た概念を参照するテキストは、学習された多様体上で互いに近くに配置されるんやで。
深層学習モデルがやってることを理解する一つの方法は、高次元の入力空間を、多様体上のデータの位置が意味を持つ低次元の多様体にマッピングしてるって考えることやな。
さて、多様体仮説はニューラルスケーリング則とどう関係してるんやろか?訓練データセットのサイズとモデルの性能(テストセットでのクロスエントロピー損失で測定される)を結びつけるニューラルスケーリング則を考えてみよか。
多様体仮説が正しいなら、訓練データは高次元空間のある多様体上の点やねん。そして、モデルはこの多様体の形を学習しようとするんや。訓練点の多様体上での密度は、データ量だけでなく、多様体の次元にも依存するんやで。
1次元空間では、D個の訓練データ点があって、多様体の全長がLやとすると、訓練点間の平均距離sは、LをDで割ることで計算できるんや。訓練点間の距離を直接考えるんじゃなくて、各点を中心とする大きさsの小さな近傍を考えるほうが、高次元に進むときに扱いやすいんやで。これらの小さな近傍が互いに接してるから、データ点間の距離はまだsなんやな。
2次元に移ると、今度は実効的に、L×Lの正方形を、各訓練点を中心とする一辺の長さsの小さな正方形で埋めることになるんや。大きな正方形の総面積L^2は、データ点の数Dと各小さな正方形の面積s^2の積に等しくなるはずやねん。つまり、D * s^2 = L^2やな。これを並べ替えて解くと、s = L * D^(-1/2)ってことがわかるんや。
3次元に移ると、今度は一辺の長さLの立方体を、一辺の長さsのD個の立方体で埋めることになるんや。D個の小さな立方体の体積と大きな立方体の体積を等しいとすると、s = L * D^(-1/3)ってことがわかるんやな。
だから、より高次元に移るにつれて、点間の平均距離は、多様体の次元dの負のべき乗に比例してスケールすることになるんや。つまり、s ∝ D^(-1/d)やねん。
さて、訓練点の多様体上での密度を気にするのは、テストの点が来たときに、その誤差が最も近い訓練点までの距離の関数で制限されるからなんや。モデルが十分に強力で訓練データに完全にフィットできると仮定すると、学習された多様体は訓練点で真のデータ多様体と完全に一致するんやで。
ReLU活性化関数を使う深層ニューラルネットワークは、これらの訓練点の間を線形補間して予測を行うことができるんや。多様体が滑らかだと仮定すると、テイラー展開を使って、誤差が最も近い訓練点とテスト点の間の距離の2乗でスケールすることを示せるんやな。
訓練点間の平均距離が、データセットのサイズDの-1/d乗でスケールすることを確立したから、この項を2乗して、誤差がデータセットサイズとどうスケールするかの推定値を得ることができるんや。つまり、D^(-2/d)やな。
最後に、モデルがクロスエントロピー損失関数を使ってることを思い出してな。でも、これまでの多様体分析では予測値と真の値の間の距離しか考えてへんかったんや。これは先ほど考えたL1損失値に相当するんやけどな。クロスエントロピー関数に同様のテイラー展開を適用すると、クロスエントロピー損失が予測値と真の値の間の距離の2乗でスケールすることを示せるんや。
だから、最終的な理論的結果として、クロスエントロピー損失がデータセットサイズDの-2/d乗の2乗、つまりD^(-4/d)でスケールすると予想されるんやな。これは最悪の場合のエラーを表してるから、上限になるんや。だから、クロスエントロピー損失はこの項に比例するか、それよりも良くスケールすると予想されるんやで。
この理論を開発したチームは、これを「解像度制限スケーリング」と呼んでるんや。より多くのデータがモデルにデータ多様体をより良く解像することを可能にしてるからやな。
面白いことに、モデルサイズと損失の関係を考えるとき、理論は同じ4乗の関係を予測するんや。この場合、追加のモデルパラメータがモデルにより高い解像度でデータ多様体にフィットすることを可能にしてるという考え方やな。
さて、この理論的な結果は観測とどう比較されるんやろか?OpenAIチームもGoogle DeepMindチームも、フィットしたスケーリング値を公開してるんや。これらは理論が予測するものと一致するんやろうか?
2020年1月のOpenAIの論文では、チームはクロスエントロピー損失がデータセットサイズの-0.095乗でスケールすることを観察したんや。彼らはこの値をαsubdと呼んでるんやけどな。理論が正しければ、αsubdはデータの本質的な次元の4分の-4以上でなければならんのやで。
この最後のステップは難しいんや。なぜなら、データ多様体の次元、つまり自然言語の本質的な次元を推定する必要があるからやな。チームは、本質的な次元が知られてるか、よく推定できる小さな問題から始めたんや。本質的な次元が既知の合成訓練データが教師モデルによって作成され、生徒モデルによって学習される場合、理論的なスケーリングパラメータと実験的なスケーリングパラメータの間にかなり良い一致が見られたんやで。
IMNISTを含む小規模な画像データセットでも、-4/d予測がうまく成り立つことを示すこともできたんや。
最後に言語に目を向けると、観測されたスケーリング指数-0.095を代入すると、自然言語の本質的な次元は約42になるはずやねん。チームは言語モデルが学習した多様体の本質的な次元を推定することでこの結果をテストしたんやけど、本質的な次元は有意に高く、100のオーダーであることがわかったんや。
理論からの不等式はまだ成り立ってるけど、合成データや小規模なデータセットで観察されたような一致は見られへんのやな。
結局のところ、我々が得たのは、ある程度の予測力を持つ説得力のある理論やけど、まだ統一されたAI理論とは言えへんのやな。
2020年初頭のOpenAIの最初のスケーリング論文から2023年のGPT-4のリリースまでの5年間で、驚くべきAIの進歩を見てきたんや。ニューラルスケーリング則は、より良い性能への道を示してくれたんやで。
ここで注意しておきたいのは、スケーリング則は次の単語予測の性能を非常によく予測したけど、特定のモデルの振る舞いの存在を予測するのは、より難しいままやったってことやな。単語の並べ替え、算術、多段階推論のようなタスクでの能力は、様々なスケールで突然現れるように見えるんや。
ニューラルネットワーク駆動のアプローチがどれだけ遠くまで我々を連れて行ったかを見るのは信じられへんことやし、もちろん、どこまで行けるかはまだわからへんのやな。
ここで紹介した論文の著者の多くは物理学のバックグラウンドを持ってるんやけど、彼らのアプローチや言葉遣いから、統一原理を探し求めてるのを感じることができるんや。この考え方がAIに適用されるのを見るのは、とてもワクワクすることやな。
ニューラルスケーリング則は、AIにおける統一の強力な例なんや。驚くほど正確で有用な経験的結果を提供し、知的システムのスケーリングの統一理論への魅力的な手がかりを与えてくれてるんやで。
スケーリング則や他の理論が次の5年間でどこまで我々を連れて行ってくれるのか、そしてAIが本当にこの線を越えられないのかどうか、その理由を解明できるのかどうか、見守るのが楽しみやな。
Welch Labsの動画を楽しんでくれてるなら、僕の虚数に関する本も気に入ってくれると思うんや。今年の後半に出版される予定なんやけどな。2016年に、虚数に関する大規模な13部構成のYouTubeシリーズを作ったんやけど、これは本当に素晴らしいトピックなんや。当時、この本の初期バージョンをリリースしたんやけど、今は修正して、大幅に拡張する過程にあるんやで。
僕の目標は、虚数に関する最高の本を作ることなんや。高品質のハードカバー印刷版の本は今年の後半に出荷開始する予定やけど、今日から説明欄のリンクで予約注文できるんやで。注文すると、2016年版のPDFコピーが無料でダウンロードできて、今日から読めるんやで。
新しいポスターデザインにも取り組んでるんや。今、活性化アトラスポスターのダークモードバージョンができたんやで。これらは、ビジョンモデルが学習したデータ多様体を視覚化する素晴らしい方法なんや。これらすべてとそれ以上のものが、Welch Labsのストアで見つかるんやで。

コメント

タイトルとURLをコピーしました