新しい強化学習手法:FlowRL(GFlowNets)

AI研究
この記事は約19分で読めます。

この動画では、従来の強化学習手法であるPPOやGRPOが抱えるモード崩壊の問題を解決する新しいアプローチ「Flow強化学習」について詳しく解説している。FlowRLは生成フローネットワーク(GFlowNets)の数学的枠組みを借用し、単一の最適解を追求するのではなく、報酬分布全体とのマッチングを目指すことで、より多様で頑健な推論システムを実現する。山の地形と水の流れという直感的な比喩を用いて、複雑な数学的概念を分かりやすく説明し、従来手法との比較を通じてその優位性を示している。

NEW RL Method: FlowRL (GFlowNets)
NEW FlowRL, a reinforcement learning algorithm for enhancing LLM reasoning by shifting from traditional reward maximizat...

FlowRLの革新的アプローチ

みなさん、こんにちは。戻ってきてくれてほんまに嬉しいわ。今日は新しい強化学習のアイデアと真新しい論文を紹介するで。前回9月18日の動画でもちょっと見せたけど、今回はLLM推論のための報酬分布にマッチングするフロー強化学習について深堀りしていくで。

ここでクルバック・ライブラー発散を見てもらうと、報酬最大化のPPOやGRPOではめちゃくちゃ高い値になってるやろ。せやけどフロー強化学習を見てみ、クルバック・ライブラー発散、つまり二つの確率分布の差がほぼゼロになってるんや。これがまさに我々が求めてたもんなんやで。ほんまに美しいもんが目の前にあるやないか。さあ、深く掘り下げてみよう。

新しい推論モデル、巨大な推論モデルを微調整する時はいつでも、2017年のPPOやDPOやその他何でも使って微調整していくんやけど、いつもモード崩壊と戦わなあかん。モデルの出力が反復的になって多様性がなくなって、一次元に崩壊してしまうんや。

数学的基盤とGFlowNetsの概念

フロー強化学習は単なる巧妙なハックやない。生成フローネットワーク(GFlowNets)とエネルギーベースモデルからの広範な数学的本体を持つ完全に新しいアイデアで、しっかりとした数学的正当化を提供してくれるんや。なんでこのシステムが今AIの新しい強化学習パラダイムなんかって言うと、データによる政策最適化を再構成するからなんやで。

ほんまに魅力的やわ。少し学ばなあかん。この2021年の論文を調べなあかんかった。これはベンジュの研究で、このアイデアについてのフローネットワークベースの生成モデルに関する最初の作品の一つや。彼は言うてるんや「生成プロセスをフローネットワークとして見ることで、異なる軌道が同じ最終状態をもたらすという厄介なケースを扱うことができるようになる」って。分子グラフの複雑性でこれをやったんやで。

この論文で最も重要なアイデアは何や?マルコフ決定プロセスがあって、これをフローネットワークとして見るんや。つまり、マルコフ決定プロセスの有向グラフ構造を活用して、下で詳しく説明するように、報酬の合計として私のQ値を推定するのではなく、フローを学習するってことや。

フローネットワークマルコフ決定プロセスやから、もし私の動画を見たことがあるなら、すぐに理解できるはずや。すべてのAIモデルは不確実性の上で動いてるし、もちろんすべてのAIの核心は部分観測マルコフ決定プロセスやからな。なんでこれが今日我々が持ってるあらゆるAIモデルの基盤を本当に揺るがしてるんやろか。

この研究では、任意のノードで入力フローが出力フローと等しく、総フローがすべて素晴らしいというフロー条件について説明してる。せやけど本当に重要なのは、ここで損失関数を計算する方法を見つけたことや。最初に損失関数を見ると、平方になってるから計算がずっと楽になるし、式の対数も取ってる。なんでこれがこんなに美しいのか、後で説明するで。

水の流れの比喩による理解

この複雑な数学的装置を強化学習に使うことになるんや。「でも強化学習の話やったやないか。どうやって合うんや?」って言うやろ。報酬分布があって、どうやってクルバック・ライブラー発散をひどい8.6から美しい0.1に減らすことができるんや?まあ、そういうことや。見てみよう。

純粋に数学的な説明を最初からするつもりはないんや。簡単な言葉で説明したいし、理解しやすい例を見つけたいと思ってる。たくさんの購読者が「簡単な言葉で説明してくれへん?」って聞いてくるからな。数学的説明よりも簡単な説明により多くの時間を投資したで。さあ、ここから始めよう。

フローの観点からこの複雑さを理解したいんや。フローがあるとしよう、何でもええからフローや。想像できるフローとして水の流れを考えてみよう。雨がある。雲があって、山の上に雨が降ってる。そう、私はここオーストリアに住んでて、ヨーロッパの美しい場所や。

この雨が水の源なんや。流れが注いでる。そして複雑さがある。この複雑さは想像できる三次元の山岳地形や。いや、至る所に岩だらけの地形がある。これが我々の思考実験での複雑さの表現や。

そして水が雨として降って、この複雑な地形、ロッキー山脈を流れ下って、異なる谷に向かっていく。そしてその谷では、多かれ少なかれ安定した条件で、その谷で育つ作物のための異なる肥沃度カラー指標がある。簡単なアイデアやろ。

フロー強化学習は今、各谷の特定の肥沃度カラー指標を考慮して、我々の山の各谷に適切な量の水を導く仕組みなんや。すべての谷が繁栄するのに適切な量の水を持つべきやねん。目標は、この岩だらけの地形に降る雨から完璧なフローを持って、岩だらけの地形を下って谷へのすべての道筋を提供することや。

そしてこの道筋はもちろん推論パス、LLMから生成される思考の連鎖パスで、すべての谷の土壌を、それぞれの特定の肥沃度係数、複雑さに対して完璧に灌漑するのに十分な水で満たすんや。

システムの構成要素の詳細解説

比較してみよう。すぐには分からんかもしれんからな。山の上の雨って何や?山の上の雨は単純に我々の完全なシステムの初期状態や。あなたのプロンプトやねん。これがすべての潜在的解決策の源なんや。与えられた数学的問題に対して、これは問題文そのものや。

「ABCの量子場理論的説明を見つけろ」みたいな感じやな。素晴らしい。そして水の流れ。水の流れは我々の統計モデルでは当然、我々が扱ってる確率質量で、水の量は確率そのものや。通常1か100%に正規化される、どっちでもええ。フロー強化学習は、この特定の確率の確率質量の、つまり水の流れの分布を、岩だらけの地形の上でどう分配するかを決定するんや。

岩だらけの地形はもちろん我々の勾配ランドスケープや。山の地形はすべての可能なトークン系列の空間やねん。この観点に変えてみよう。山の地形がすべての可能な、もしくはトークン系列上の答えの空間やと言うなら、短いトークン系列、短い文、何でもええ、問題の解決につながるすべての可能な思考の連鎖の巨大で複雑なランドスケープや。いくつかの道は簡単で直接的や。これが我々の深いトンネルになる。

他のものは複雑で可能性が低い。低い確率を持つから、岩だらけの細流だけや。でももっとある。もちろん谷への道があって、これが複雑さでは推論軌道で、これが我々の思考の連鎖や。これは特定のステップの系列のようなもんや。

これがLLMやコーディングLLMによって与えられる答えや。「このコード系列の解決策が欲しい」って言ったり、数学的LLMで「この特定の方程式を解け」って言ったりするとき、谷への答えのPやけど、谷自体は、状態表現から見ると、我々のシステムの最終状態やねん。推論パスの最後で、ビジョン言語モデルとLLMによって生成された最終答えがある。

谷の肥沃度はもちろん、我々が強化学習表現で作業してることを覚えておいて、報酬関数や。ここでスカラー報酬を使おう。肥沃度が高い値は、正しく、エレガントで、高品質な解決策を表す。つまり高い報酬の応答や。岩だらけの谷があったら、これは多かれ少なかれ不正確な解決策やねん。この非常に簡単な類推で作業してるんや。

従来手法との比較と問題点

現在この作業を行う現在のアルゴリズム、PPOやGRPOのようなものは純粋な報酬最大化器や。彼らは山にやってくる攻撃的な土木技師のように振る舞う。一つの目標がある。最も肥沃な単一の谷での作物収量を最大化することや。

技師は言うんや「おい、山から見下ろすと7つの谷が見えるけど、緑の谷は一つだけや」って。そして今、すべての水をこの単一の谷に下流に集中させる。これが報酬最大化器や。でも我々はこれを望んでない。新しい解決策が欲しいんや。すべてのシステムが一つの特定の解決策に崩壊することを望んでない。システムのモード崩壊が起こることを望んでないんや。

でもこれが今GPOの結果で起こってることや。一つのチャンピオン谷がある。これは完璧に灌漑されて、ここで信じられないほど生産性が高い。これがAIが特定の問題、コーディング説明、何でも持ってる定番の解決策や。そして他のすべての谷、他のすべての可能な解決策パス、もしかしたら90%正しいかもしれんものでも、次の問題、より高い複雑さの問題にとって不可欠かもしれん道筋を持ってるかもしれんのに、90%の肥沃度しかないこの谷を探索せなあかんねん。

今は干上がって乾燥した砂漠になってしまう。だから推論エコシステムが単一のモードに崩壊して、一つの谷への、一つの特定の問題への解決策への水のパイプラインしかなくなる。でも問題を変更したら想像してみ、この既知の道筋はもはや何の解決策も提供せんようになる。これが我々の推論システムのモード崩壊と呼ぶもんや。

解決策は何や?解決策はフロー強化学習システムで、これは分布マッチャーや。完璧な単一の答えを探すのではなく、完全な答えの多様性を見てるんや。健全で多様で回復力のある流域を作ろうとする賢明な生態学者のように行動するって言おう。目標は、各谷に到達する水の量が、その自然な肥沃度に完全に比例することを確実にすることや。

谷で見つけた解決策にな。推論パスに従う。推論パスを学習する。100%正確でなくても、90%正確かもしれん推論パスを探索する。なぜなら、このAIへの次のタスクが高い複雑さレベルかもしれんし、そしたら前に進むための新しい道筋を見つけなあかんからや。

フロー強化学習の核心機能

フロー強化学習がダムを建設して一つの谷にすべてを送ることだけに集中せずに、これをどうやって達成するのかって聞くかもしれん。アイデアは、ちょっと挑戦的やけど、三次元の山地形そのものを再形成することや。数学的表現を見下ろすと、我々の政策π_θを変更する。θはパラメータと重みとすべてや。これがフローバランス目的関数の魔法が入ってくるところや。

これが新しい数学的、フロー分布の新しい数学的装置が強化学習に入ってくるところや。この水の流れのレンズを通して再び核心目的を見てみよう。いくつかの方程式をこの非常に簡単なフロー方程式に書き直すことができる。雨の例でさらに簡単にするために。

総降雨量という項がある。空から降り注ぐ水や。フローベースの分析があるなら、これは総降雨量、入力や。そして特定のフロー性を持つたくさんの道筋がある。特定の推論パスを水がどれだけ速く谷へ、解決策へと下っていくかや。

もちろんこれは何らかの比例関係でなければならん。そしてフローの最後に、すべての異なる谷に到着するターゲットの水がある。簡単なアイデアやろ。

この記法に慣れてない人は、いつも「何の話をしてるんや?π_yって何や?」って聞いてくる。これは特定のプロンプトXがあって、特定の答えYを生成したいときのモデル生成の確率や。これが単純に戦略や政策π_θで、θはシステムの自由に訓練可能なパラメータや。

これを別の観点から見てみよう。最初の項は、もちろん対数で、単純に加算があって乗算ではない、総降雨量。特定の問題、特定のタスクに対する山脈全体の総降雨量のモデル推定や。もちろん今の問題は、このパラメータをどう決定するかや。これについては後で詳しく。

戦略や政策π_θは、タスクの複雑さXが与えられたときに、水が特定の解決策パスyを流れ下るのがどれだけ容易かを表す。高い確率のパスは深くて滑らかな川床のようなもので、低い確率は谷への水の小さな細流や。

そしてもちろん、推測できるように、これは報酬関数や。各パスの最後で谷に到達すべき水のターゲット量や。なぜか?その特定の肥沃度、肥沃度係数に基づいて。非常に簡単な方程式やろ。

なぜここで対数を書くのかって再び聞かれた。連鎖乗算をずっと安定した和に変換できるから、ここに和があるんや。これは単により簡単な数学的計算のためやねん。

バランス機構の詳細

複数の谷と複数の下流の川、複数の拡張パス、探索せなあかん複数の複雑さがある場合、この完全なバランス行為がどう機能するのか。多かれ少なかれ二つの選択肢がある。谷がこの雨の流れによって灌漑不足の状態にある場合。何が起こってるか?バランスが取れてない方程式がある。非常に高い損失関数がある。

これを修正するために、オプティマイザーはこの谷につながる道筋を侵食して、政策確率π_θを増加させることで、より深いチャンネルを掘る。より多くの水が自然にそこに流れる。なぜならこの谷の肥沃度が高いから、より多くの水が必要で、この特定の解決策へのより良い推論パスが必要なだけや。

または正反対がある。谷が過灌漑状態にある。再び方程式はバランスが取れてない。損失も本当に高い。だからオプティマイザーは、その特定の下流パスに堆積物を堆積させて、水が流れるのを困難にすることで、フローを減らそうとする。もちろん、これは数学的言葉では正則化項やけど、政策確率π_θを減少させることで簡単な例を示したいんや。

これはサンプリングするすべてのパスに対して、このバランス圧力を何度も適用することで、単一のユニークな解決策を強制するのではなく、異なる谷について調整する制御ループやと分かる。確率のランドスケープ全体を美しい平衡が達成されるまで調整する。

すべての確率質量のフローが、すべての推論パスにわたって、結果の報酬に対する完璧な比例で肥沃なすべての谷に自然に分散する。これが肥沃度係数や。数学的複雑さを非常に簡単なイメージで説明しようとしてるのが分かるやろ。

政策やエージェントの戦略で、次に取る行動を決定するπ、これがターゲットの水、つまり谷や。多かれ少なかれ、最初の項、Zとは何か、このセットとは何かに集中するだけでええ。数学的構造での例では何なのか見てみよう。

すでにセットPを総降雨量として特定したけど、もちろんひねりがある。誰も総降雨量がどうなるかなんて知らんし、事前にこれを知る可能性はゼロや。山脈をその全体性で見たいなら。もちろんそれは我々が見て探索せなあかん問題空間や。

強化学習での探索可能性対開拓可能性を覚えてるやろ。この問題空間は広大で未知で、アイデアもない。だから巨大な計量カップをその上に置いて、古い雨をすべて集めたり、何らかの方法でこれを測定したりすることはできんのや。

だから学習可能な気象予報士を雇う。これが解決策や。この気象予報士は、我々のニューラルネットワークZ、πのセット以外の何物でもない。フローを開始しよう。最初、予報士は全く分からん状態や。システムを学習せなあかん。このシステムをゼロから訓練せなあかん。問題がどれだけの報酬ポテンシャルを持ってるか全く分からん。

新しい山脈、人間から与えられた新しいプロンプトに対して、推測をするかもしれん。「今日は軽い霧雨を予測します」みたいに。Zの小さな値や。そしてシステムは自然にいくつかのパスに水を流す。政策、与えられた政策π_θがいくつかの推論軌道yを生成して、これらは探索的なプローブのようなもんや。

これらのプローブが異なる谷に流れて、谷での水の効果を非常に簡単に測定できるとしよう。特定の肥沃度があって、これがもちろん我々の報酬関数や。

学習メカニズムと自己修正システム

結果が観測される。マルコフ決定プロセス、部分観測マルコフ決定プロセスを覚えてるやろ。例では、これらが観測される。プローブが気象予報士に送り返される。過小評価がある場合、予報士は軽い霧雨を予測したけど、プローブがいくつかの信じられないほど肥沃な谷を発見する。

高い報酬が戻ってきて、「もっと水を谷に与えてくれたら、作物生産100%になるで」って言う。だから何であり得るかとのミスマッチがある。システムは予測が間違ってたことを知る。谷には予想よりもはるかに多くの肥沃ポテンシャルがある。

システムの損失関数、学習は、損失関数が低い予測のために予報士にペナルティを与えて、Zの推定を増加させることを強制する方法にある。正反対の過大評価がある場合はどうやろ?システムも予報士が楽観的すぎることにペナルティを与えて、Zの推定を減少させることを強制する。平衡に達するループがあることが分かる。

セットネットワークは総降雨量を測定してるだけやない。あらゆるアイスシステムのように、雨から複雑な山地形を通って多数の谷への特定のフローが与えられたときの、ランドスケープ全体の総統合肥沃度を予測することを学習してるんや。

個々の水の流れと作物を繁栄させる水の流れの結果によって守られた局所的証拠に対して、そのグローバル予測を常に比較することで、これを学習する。美しいやろ。

戻って異なる観点を持とう。セットは今、システムが個々のフローを理解することを可能にする総報酬予算の自己修正推定や。システムは自己修正、自己学習システムを学習してて、川の流れはそれを養う総降雨量と比較された時だけ意味を持つ。

数学的理論の深層理解

フローインとフローアウトとフローバランス方程式の理解があるから見てみよう。科学的観点では何を意味するか?システムの学習可能な分配関数、学習可能な分配関数以外の何物でもない。

本当に深く掘り下げたいなら、この論文をお勧めする時が来た。これが私の週末の論文や。ここに75ページある。これは2023年6月からやねん。本当に興味深い。GFlowNet基礎。これを見てくれ。これは詳細な数学的内容や。知る必要があるすべてを与えてくれる。でも数学的深堀りの前に、メインアイデア、メイン理解に集中したいだけや。

目標は何や?目標は、解決策yの確率がその指数化された報酬に比例するターゲット確率分布を作成することや。報酬関数、βを忘れて、指数を忘れて、我々の報酬やとしよう。これを有効な確率分布にして、すべての確率分布で1に合計するようにするために、もちろん正規化定数で割らなあかん。そして、この正規化定数が我々の分配関数Zや。

美しいやろ?これや。絶対にそうや。セットは何や?セットをどうやって計算できるか?このアイデアは簡単や。解決策のセットYのすべての可能な単一推論パスYを通り、ハイパーパラメータで報酬関数を計算して指数化して、すべてを足し上げる。

問題がある。すべての可能な推論がある場合、これは無制限にほぼ、天文学的にそうや。だからこれを計算する方法はない。根本的な障壁やねん。これが問題やった。

フロー強化学習のアイデアは、GFlowNetsの数学的枠組みからこれを借用して、「計算できんなら、近似することを学習しよう」って言うことや。より単純なニューラルネットワークZをパラメータと一緒に作成して、このニューラルネットワークの唯一の仕事は、その時点でのlog Zの値の最良の推測である単一のスカラー数を出力することや。見るところどこでも近似やねん。

損失関数と自己一貫性ループ

次の美しいアイデアは、この損失関数をどう構築するかや。政策ネットワーク、我々のAIシステムの戦略の訓練と、Zのセット、我々のセットニューラルネットワークの訓練を統合して、同じ損失関数を使ってこれを構築するって言うんや。ここに損失関数があって、フローRLが最小化しようとする核心目的関数である軌道バランスSLossや。

ここでの美しさを見てくれ、我々の期待値や。もちろんこの損失、Z関数と戦略と報酬関数が見える。この損失は美しい自己一貫性ループを作る。

すべてのサンプルYに対して、損失は現在の政策の確率π_θと観測された報酬Rが与えられたときに、方程式をバランスさせるためにZの値がどうあるべきだったかを暗黙的にZに伝える。これはフロー方程式や。

多くのループとサンプルの平均で、我々のZは政策、戦略そのものによって探索される報酬分布と一貫性のある値に収束するように押される。これが美しさや。

この損失関数をもう一度見てくれ。エレガンスがある。損失関数は、推論パスに割り当てる確率が、そのパスが達成する報酬に比例してない時はいつでも、モデルにペナルティを与える。それによって報酬分布全体にマッチすることを教えるんや。

最初に示したクルバック・ライブラー発散を覚えてるか、フローRLからのものがほぼ0.11、極端に小さい。これが理由で、これがメイン理解で、何が起こってるかや。初期フロー、パス確率と最終報酬を見たいなら、これがシステムが同時に学習するものや。

メインの洞察は、追跡可能で学習可能なものが、解決不可能なグローバル正規化、計算上解決不可能なグローバル正規化定数の代わりに立つってことや。このトリックがフロー強化学習に、この不可能な和を計算することなく、強化学習の演習を分布マッチング問題として枠組み化することを可能にする。

理論的にはエレガントやけど実用的でないアイデアを、実際に使える強化学習最適化のための本当に動作するアルゴリズムに変えるんや。これがキーテクニックで、論文を読んだら、もちろんエネルギーベースモデル分布と関係があるって分かる。見てくれ、美しいで。

だから一つの文だけ覚えてたいなら、これや。フロー強化学習のこの新しい方法論は、GFlowNetの軌道バランス目的の別の数学的本体から巧妙に使用して、現在計算不可能な扱いにくいクルバック・ライブラー発散最小化目的に対する安定で実用的な代理として機能させる。だから我々はこれに近づく方法を見つけたんや。

モデル出力の分布、π_θが真の報酬分布π_tildeと同一になることを望む。もちろん、差を測定する数学的ツールがクルバック・ライブラー発散や。完璧な目的はこの値をゼロに最小化することや。フローRLで最初に示したように、本当に0.11に近い。

示したように、クルバック・ライブラー発散を本当にやりたいなら、計算上ほぼ不可能や。だから美しい軌道バランス損失があって、通った項と一緒に、これがFLが最小化する目的関数として数学的なもんや。

計算上の簡略化と数学的証明

これを見ると、計算で我々を非常に助ける美しい簡略化があることに気づく。この公式は、すべての可能なy、すべての可能な解決策パスを同時に合計する必要がない。クルバック・ライブラー最適化公式の複雑さではなく、安定した平方損失形式がある。

これが完全なプレプリントで見る最も重要な公式の一つや。命題1を見てくれ。これがなぜこれをすることが許されるかを説明してる。クルバック・ライブラーの最小化があって、なぜ突然軌道バランス関数に行けるかって言う。

ランダムサンプルyからの局所的で計算しやすい軌道バランス誤差を一貫して最小化すると、複雑な多様体でのモデルの勾配、つまり更新方向が、無制限のコンピュータパワーで魔法的にグローバルで計算不可能なクルバック・ライブラー発散を計算した場合に得られたであろう勾配と同じになることを数学的公式で証明してる。

勾配について言ってるんや、同じやって。これは数学的レベルで理解するのは簡単やない。理解するのは簡単やない。でも美しいガイダンスを提供してくれてて、これが今週末に楽しむもんや。

強化学習手法の比較と応用

さあ、ここや。フロー強化学習は、我々のフローで同じ正味の結果を達成する簡単で効率的な局所バランシング行為で、不可能なグローバル比較を置き換える。もちろん、人間のフィードバックからの強化学習やPPOやすべてやGRPOやDPOについて「今フロー強化学習があるけど、いつ何を使うか、何が良いか、何が起こるか」って言うかもしれん。もちろん論文でこれを見つける。最後のものが最良で、他のすべてを5〜10%上回ってる。でもそんなに単純やない。これを見てみよう。

違う方法で定式化しよう。GRPOはスカラー報酬を最大化することを目指して、最高可能スコアを生成する政策π_θを見つけることがゴールや。ピーククライマーで、最高の山頂だけを探す。これや。

DPOは違う。人間の好みの対数尤度を最大化する。好み最大化器や。フロー強化学習は何や?報酬から導出されたターゲット確率分布をマッチングすることを目指す。そのゴールは、その出力がすべての良い解決策の値、品質に比例したすべての良い肥沃度係数のランドスケープ全体を反映することや。ピーク最適化器、好み最適化器、そしてエコシステム最適化器がある。

タスクが時間とともに増加して、解決すべきより高い複雑さを持つことになることを考えると、エコシステムマネージャーが正しい前進方法かもしれん。だから、タスクが創造性、数学的・計算的側面からの頑健性、数学、戦略計画、または科学的発見のための複数の有効な解決策を見つけることを要求する場合、一つの前進パスだけでなく、複数の解決策パスがあって、それらのサブパスの正しい組み合わせ的多様性を見つけなあかんのや。

フロー強化学習は解決策を見つけるためのより良いパラダイムを表すと思う。なぜなら、他のシステムにある根本的弱点、モード崩壊に対処するからや。モード崩壊は本当にGRPOやすべてにあるもので、特に数学や戦略計画や計画ツール使用などの複雑なドメインでの最大化ベース手法を悩ませるもんや。

結論と今後の展望

だからこの研究、上海交通大学、上海AI研究所、マイクロソフトリサーチ、清華大学、北京大学、中国人民大学、スタンフォード大学、シカゴのトヨタ技術研究所による研究は、美しい論文やと思う。この論文を見なあかん。

これは特に複雑な因果推論について、次のAIシステムのフロンティアにとって本当に重要で良い解決策やと思う。楽しんでもらえたら嬉しい。チャンネル登録してくれたら、次の動画で会おう。

コメント

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