ディープラーニングに関する理論コースを受講した後、多くの人が独自のプロジェクトを構築してみることに興味を持ちます。この記事では、最初のステップから始めて、プロジェクト開発で発生するさまざまな問題を解決する方法を説明します。 この記事は 6 つのパートで構成され、ディープラーニング (DL) プロジェクトのプロセス全体を網羅しています。自動コミックカラー化プロジェクトを使用して、ディープラーニングの設計、プログラムのデバッグ、およびパラメータ調整のプロセスを説明します。 この記事のテーマは「ディープラーニング プロジェクトを開始するには?」であり、次の 6 つのパートに分かれています。
パート 1: ディープラーニング プロジェクトの開始 1. どのようなプロジェクトを選択すればよいですか? 多くの人工知能プロジェクトは、実際にはそれほど深刻なものではなく、実行するのがかなり楽しいものです。 2017 年の初めに、私は敵対的生成ネットワーク (GAN) に関する研究の一環として、日本のマンガをカラー化するプロジェクトを始めました。この問題は解決が難しいですが、特に私のように絵が描けない人にとっては興味深いものです。プロジェクトを探すときは、漸進的な改善、市場性のある製品の作成、より速く、より高品質に学習する新しいモデルの作成に限定しないでください。 2. ディープネットワーク(DN)のデバッグは難しい ディープラーニング モデルのトレーニングには何百万回もの反復処理が必要なため、バグを見つけるプロセスは非常に困難で、クラッシュが発生しやすくなります。したがって、簡単なものから始めて、段階的に進めていく必要があります。たとえば、コードのデバッグが完了したら、モデルの最適化(正規化など)をいつでも実行できます。さらに、予測とモデル メトリックを頻繁に視覚化する必要があり、最初にモデルを実行して、頼りになるベースラインを確保する必要があります。 1 つの大きなモデルに固執せず、すべてのモジュールを正しくしようとしないことが最善です。 3. 測定して学ぶ 壮大なプロジェクト計画は悲惨な失敗につながる可能性があります。ほとんどの個人プロジェクトの最初のバージョンは 2 ~ 4 か月続きますが、これは調査、デバッグ、実験に多くの時間がかかるため、非常に短い期間です。通常、私たちはこれらの複雑な実験を一晩かけて実行するようにスケジュールし、翌朝までに次のステップに進むのに十分な情報が得られることを期待します。初期段階では、これらの実験は 12 時間を超えないようにするのが良い目安です。これを実現するために、私たちは漫画の着色プロジェクトの範囲を、単一のアニメキャラクターの着色に絞り込みました。さらに、実験におけるモデルの欠点を分析できるように、多くのテストを設計する必要があります。一般的に、これらのテストはあまり先の計画を立てるべきではありません。迅速に測定して学習し、設計の次のステップに十分なフィードバックを提供する必要があります。 4. 研究と製品 2017 年の春に漫画のカラー化プロジェクトについて話し合い始めたとき、Kevin Frans は GAN を使用して漫画に色のヒントを追加する Deepcolor プロジェクトを進めていました。 目標を定義するときは、プロジェクトが完了した後もそのプロジェクトが有意義なものとなるようにするために多大な努力を払うことになります。 GAN モデルは非常に複雑であり、2017 年の初めには製品の埋め込みに必要な品質に達していませんでした。ただし、製品をインテリジェントに処理できる範囲にアプリケーションを絞り込むと、品質を商用レベルまで引き上げることができます。このため、どのような DL プロジェクトに着手する場合でも、モデルの一般化、容量、精度のバランスを取る必要があります。 5. コスト 実際のモデルをトレーニングするには GPU を使用する必要があります。 CPUより20~100倍高速です。最も安価な Amazon GPU p2.xlarge サイトインスタンスの料金は 1 日あたり 7.5 ドルですが、8 コア GPU の料金は 1 日あたり 75 ドルにもなります。私たちの漫画着色プロジェクトでは、いくつかの実験に 2 日以上かかったため、1 週間あたりの平均コストは少なくとも 150 ドルになりました。より高速な AWS インスタンスの場合、コストは週あたり 1,500 ドルにも達する可能性があります。クラウド コンピューティングを使用する代わりに、スタンドアロン コンピュータを購入することもできます。 2018 年 2 月時点で、Nvidia GeForce GTX 1080 Ti を搭載したデスクトップの価格は約 2,200 ドルでした。微調整された VGG モデルをトレーニングする場合、P2 インスタンスよりも約 5 倍高速です。 6. タイムライン 開発は 4 つのフェーズに分割され、最後の 3 つのフェーズは複数回の反復で実行されました。
(1)プロジェクト研究 まず、既存の製品を調査して弱点を探ります。 GAN タイプのソリューションの多くは空間的な色の手がかりを使用しており、パターンが少し不明瞭で、色が混ざることもあります。私たちは、ヒントなしの色の生成と色の忠実度の向上という 2 つの優先事項を掲げ、プロジェクトの期間を 2 か月に設定しました。私たちの目標は次のとおりです。 空間的な色のヒントを使用せずに、単一のアニメーション キャラクターにグレースケールの漫画本の色付けを施します。 (2)巨人の肩の上に立つ 次に、関連する研究とオープンソース プロジェクトを理解する必要があります。多くの人は、実践を始める前に少なくとも数十の論文とプロジェクトを読みます。たとえば、GAN を詳しく調べると、DRAGAN、cGAN、LSGAN など、12 個の新しい GAN モデルがあることがわかります。研究論文を読むのは苦痛ですが、非常にやりがいがあります。 ディープラーニング (DL) コードは洗練されていますがデバッグが難しく、多くの研究論文では実装の詳細が省略されていることがよくあります。多くのプロジェクトはオープンソースの実装から始まり、同様の問題を解決するので、より多くのオープンソース プロジェクトを検索できます。そこで、GitHub 上のさまざまな GAN バリアントのコード実装を調べ、それらに対していくつかのテストを実行しました。 パート 2: ディープラーニング データセットの作成 ディープラーニング プロジェクトの成功はデータセットの品質に左右されます。この記事のパート 2 では、優れたトレーニング データセットを作成するための中心的な問題について説明します。 1. 公開データセットと学術データセット 研究プロジェクトの場合、確立された公開データセットを検索できます。これらのデータセットは、よりクリーンなサンプルとベースライン モデルのパフォーマンスを提供できます。利用可能な公開データセットが複数ある場合は、問題に最も関連性が高く、サンプルの品質が最も高いデータセットを選択してください。 2. カスタムデータセット 実際の問題では、問題領域からのサンプルが必要です。まず、公開データセットを探してみてください。高品質のカスタム データセットを作成するための研究が不足しています。利用できるデータがない場合は、データをスクレイピングできる場所を検索します。通常、この場所への参照は多数ありますが、データの品質は低いことが多く、整理するには多大な労力が必要です。サンプルを入手する前に、時間を取ってすべてのオプションを評価し、最も関連性の高いものを選択してください。 高品質のデータセットには、次の機能が含まれている必要があります。
一度にすべてのデータをクロールしないでください。私たちは、問題に関連するデータを取得するために、ラベルやカテゴリを利用して Web サイトのサンプルをクロールすることがよくあります。スクレイピングに対する最善のアプローチは、モデルをトレーニングし、少数の例でテストし、学んだ教訓に基づいてスクレイピング方法を改善することです。 スクレイピングしたデータをクリーンアップすることは非常に重要です。そうしないと、最高のモデル設計であっても人間レベルのパフォーマンスを達成できなくなります。 Danbooru と Safebooru はアニメキャラクターの非常に人気のあるソースですが、一部のディープラーニング アプリケーションでは、より高品質の描画のために Getchu が好まれます。ラベルのセットを使用して Safebooru から画像をダウンロードし、サンプルを視覚的に検査し、テストを実行してエラー (パフォーマンスの悪いサンプル) を分析できます。 モデルのトレーニングと視覚的な評価の両方により、ラベル選択を絞り込むための追加情報が提供されます。反復が続くにつれて、私たちはより多くのことを学び、徐々にサンプルを蓄積していきます。また、文字が小さすぎる画像をすべて削除するなど、問題に関係のないサンプルをさらに除外するために分類器を使用する必要があります。学術データセットと比較すると、小規模プロジェクトでは収集されるサンプルが非常に少なく、適切な場合に転移学習を適用できます。 以下の左側の画像は PaintsChainer によって提供され、右側の画像は最終モデルによって色付けされています。 いくつかのトレーニング サンプルを使用してアルゴリズムをテストすることにしました。結果は、適用された色が少なく、スタイリングが間違っていたため、嬉しい驚きではありませんでした。 モデルはしばらくトレーニングされているため、どのような種類の描画のパフォーマンスが悪いかがわかっています。予想通り、複雑な構造を持つ絵は色を塗るのが難しくなります。 これは、サンプルを慎重に選択することが非常に重要であることを示しています。 PaintsChainer は、製品として、得意とするラインの種類に重点を置くのが賢明です。今回はインターネットから選んだきれいな線画を使用しましたが、またしても素晴らしい結果が得られました。 ここでいくつかの教訓を挙げます。良いデータも悪いデータもありません。ただ、一部のデータがニーズを満たさない可能性があるだけです。さらに、サンプル カテゴリの数が増えると、トレーニングと出力品質の維持が難しくなり、無関係なデータを削除すると、より優れたモデルが作成される可能性があります。 開発の初期段階で、一部の図面には複雑な構造が多すぎることに気付きました。これらのプロットは、モデル容量を大幅に増加させることなく、トレーニングにほとんど価値を追加せず、トレーニング効率を損なうだけなので、そのままにしておくのが最善です。 要点
パート3: ディープラーニングの設計 セクション 3 では、いくつかの高レベルのディープラーニング戦略を紹介し、次に、基本的な DL の背景知識が必要になる可能性のある最も一般的な設計の選択肢について詳しく説明します。 1. シンプルで柔軟 初期設計はシンプルでコンパクトである必要があります。学習段階では、人々の頭の中にはたくさんの素晴らしいアイデアが溢れています。私たちは一度にすべての詳細をコード化する傾向があります。しかし、これは非現実的であり、最初からトップの結果を上回ることを期待するのは現実的ではありません。まずはネットワーク レイヤーとカスタマイズを少なくして、後で必要なハイパーパラメータの微調整を行います。これらすべてにおいて、損失関数が時間の経過とともに減少していることを確認する必要があり、最初から大規模なモデルに時間を無駄にしないようにする必要があります。 簡単なデバッグの後、モデルは 5000 回の反復後に単純な結果を生成しました。しかし、少なくともモデル上の色は固定された領域に限定され始めており、肌の色合いがいくらか明らかになってきました。 上記の結果は、モデルがカラー化を開始したかどうかに関する貴重なフィードバックを提供します。したがって、大きなモデルから始めないでください。そうしないと、モデルのデバッグとトレーニングに多くの時間を費やすことになります。 2. 優先順位付けと段階的な設計 まず、シンプルなデザインを作成するには、優先順位を選択する必要があります。複雑な問題を小さな問題に分割し、段階的に解決します。ディープラーニングを行うための正しい戦略は、学んだことをすぐに実行することです。ヒントなしのモデルを使用する前に、まず空間カラーヒント付きのモデルを使用します。一度に「ヒントなし」のモデル設計に飛びつかないでください。たとえば、最初にヒント内の空間情報を削除すると、色の品質が大幅に低下するため、優先順位を変更してモデルを改良してから次のステップに進みます。モデルを設計する過程で、多くの驚きに遭遇します。常に変更しなければならない長期計画を立てるよりも、優先順位を重視した計画を立てる方がよいでしょう。プロジェクトを管理しやすい状態に保つために、より短く、より小規模な設計反復を使用します。 3. 無作為の改善を避ける まず、双方向 LSTM や PReLU などを使用して恣意的にモデルを改善するのではなく、独自のモデルの弱点を分析します。モデルエラー (パフォーマンスが極端に悪いシナリオ) とパフォーマンス メトリックを視覚化して、モデルの問題を特定する必要があります。無作為に改善を行うと逆効果となり、トレーニング コストが比例して増加し、見返りは最小限に抑えられます。 4. 制限事項 より効率的なトレーニングを実現するために、ネットワーク設計に制約を適用します。ディープラーニングの構築は、ネットワーク層を積み重ねるだけの単純なものではありません。適切な制約を追加すると、学習がより効果的、またはよりスマートになります。たとえば、注意メカニズムを適用すると、ネットワークはどこに注意を払うべきかを知ることができます。変分オートエンコーダでは、隠れた因子が正規分布に従うようにトレーニングします。この設計では、ノイズ除去手法を適用して、空間的な色手がかりの大部分をゼロにして除去します。皮肉なことに、これによりモデルの学習と一般化が向上します。 5. デザインの詳細 この記事の残りの部分では、ディープラーニング プロジェクトで遭遇する一般的な設計上の選択肢について説明します。 (1)ディープラーニングソフトウェアフレームワーク Google が 2015 年 11 月に TensorFlow をリリースして以来、わずか 6 か月で最も人気のあるディープラーニング フレームワークになりました。短期的には競合相手を見つけるのは難しいように思われましたが、Facebook は 1 年後に PyTorch をリリースし、研究コミュニティから大きな注目を集めました。 2018 年までに、TensorFlow、PyTorch、Caffe、Caffe2、MXNet、CNTK など、選択できるディープラーニング プラットフォームが多数存在します。 一部の研究者が PyTorch を採用する主な理由は 1 つあります。PyTorch はエンドユーザーを念頭に置いて設計されており、API がシンプルで直感的だからです。エラー メッセージは直感的に理解でき、API ドキュメントは非常に完全です。事前トレーニング済みモデル、データ前処理、共通データセットの読み込みなどの PyTorch の機能は非常に人気があります。 TensorFlow も素晴らしいですが、これまでのところボトムアップのアプローチを採用しているため、非常に複雑になっています。 TensorFlow の API は非常に長く、デバッグも異なります。ディープ ネットワークを構築するための API モデルが 12 個ほどあります。 2018 年 2 月現在、TensorFlow は依然としてトップの座を維持しています。開発者コミュニティは依然として最大です。これは非常に重要な要素です。複数のマシンでモデルをトレーニングしたり、モバイル フォンに推論エンジンを展開したりする場合は、TensorFlow が唯一の選択肢です。ただし、他のプラットフォームがよりエンドユーザー中心になる場合、小規模プロジェクトから中規模プロジェクトへの移行が増えることが予想されます。 TensorFlow の開発により、ディープ ネットワークを構築するために選択できる API が多数あります。最高レベルの API は暗黙的な統合を提供する Estimator であり、TensorBoard はパフォーマンス評価を提供します。最も低いレベルの API は非常に冗長であり、多くのモジュールに分散しています。これは、ラッパー API を使用して tf.layers、tf.metrics、および tf.losses モジュールに統合され、深いネットワーク レイヤーの構築が容易になりました。 より直感的な API を求める研究者向けには、TensorFlow で直接使用できる Keras、TFLearn、TF-Slim などの選択肢もあります。私の提案は、必要な事前トレーニング済みモデルとツール(データセットをダウンロードするため)が付属するフレームワークを選択することです。さらに、学術界では、プロトタイピングに Keras API を使用することは非常に一般的です。 (2)転移学習 車輪の再発明はしないでください。多くのディープラーニング ソフトウェア プラットフォームには、VGG19、ResNet、Inception v3 などの事前トレーニング済みモデルがあります。ゼロからのトレーニングには非常に時間がかかります。 2014 年の VGG 論文に記載されているように、「VGG モデルは 4 つの NVIDIA Titan Black GPU を使用してトレーニングされ、アーキテクチャに応じて 1 つのネットワークのトレーニングに 2 ~ 3 週間かかります。」 ディープラーニングの問題を解決するために、事前トレーニング済みのモデルが多数利用可能です。たとえば、事前にトレーニングされた VGG モデルを使用して画像の特徴を抽出し、これらの特徴を LSTM モデルに入力して説明を生成します。多くの事前トレーニング済みモデルは、ImageNet データセットでトレーニングされています。ターゲット データが ImageNet とあまり変わらない場合は、モデル パラメータのほとんどを修正し、最後のいくつかの完全に接続されたレイヤーのみを再トレーニングします。それ以外の場合は、トレーニング データセットを使用してネットワーク全体をエンドツーエンドで再トレーニングする必要があります。しかし、どちらの場合も、モデルはすでに事前トレーニングされているため、再トレーニングに必要な反復回数は大幅に削減されます。トレーニング時間が短いため、トレーニング データセットが十分に大きくない場合でも、過剰適合を回避できます。このタイプの転移学習は、事前トレーニング済みの英語モデルを使用して中国語モデルをトレーニングするなど、さまざまな分野でうまく機能します。 ただし、このタイプの転移学習は、特徴を抽出するために複雑なモデルを必要とする問題にのみ適用できます。私たちのプロジェクトでは、サンプルは ImageNet とは異なるため、モデルをエンドツーエンドで再トレーニングする必要があります。ただし、比較的単純な潜在因子 (色) のみが必要な場合、VGG19 からのトレーニングの複雑さは高すぎます。そこで、私たちは新しい、よりシンプルな CNN 特徴抽出モデルを構築することにしました。 (3)コスト関数 すべてのコスト関数が同じというわけではなく、モデルのトレーニングの難易度に影響する可能性があります。いくつかのコスト関数はかなり標準的ですが、一部の問題領域では慎重な検討が必要です。
理論的な分析では適切に見えるコスト関数が、実際にはうまく機能しない可能性があります。たとえば、GAN の識別ネットワークのコスト関数では、理論的な分析で良さそうな方法ではなく、より実用的で実験的に証明された方法を採用しています。一部の問題領域では、コスト関数は部分的に推測と部分的に実験になる場合もあれば、複数のコスト関数の組み合わせになる場合もあります。私たちのプロジェクトは、標準的な GAN コスト関数から始まります。さらに、MSE を使用した再構築コストやその他の正規化コストも追加します。しかし、より優れたコスト関数を見つける方法は、私たちのプロジェクトにおける未解決の問題の 1 つであり、色の忠実度に大きな影響を与えると考えています。 (4)指標 適切なメトリックは、モデルをより適切に比較および調整するのに役立ちます。特殊な問題については、多くの DL コンペティションを開催し、詳細なメトリクスを提供する Kaggle プラットフォームをご覧ください。残念ながら、私たちの場合、芸術的なレンダリングの正確さを測定するための正確な公式を定義することは困難です。 (5)正規化 L1 正則化と L2 正則化はどちらも一般的ですが、ディープラーニングでは L2 正則化の方が人気があります。 L1 正則化の利点は何ですか? L1 正則化はよりスパースなパラメータを生成できるため、基礎となる表現を分離するのに役立ちます。ゼロ以外の各パラメータはコストにペナルティを追加するため、L1 は L2 正則化と比較してゼロ パラメータを優先します。つまり、L2 正則化では多くの小さなパラメータよりもゼロ パラメータを優先します。 L1 正規化により、フィルターがよりクリーンになり、解釈しやすくなるため、特徴選択に適しています。 L1 は外れ値の影響を受けにくく、データがあまりクリーンでない場合にも効果的に機能します。ただし、ソリューションがより安定する可能性が高いため、L2 正則化が依然として推奨されます。 (6)勾配降下法 勾配が消失したり爆発したりしていないか、常に注意深く勾配を監視してください。勾配降下法の問題には、証明が難しい原因が数多く考えられます。学習率の調整やモデル設計の変更を急いで行わないでください。小さな勾配は、入力データが正しくスケーリングされていない、または重みがすべてゼロに初期化されているなどのプログラミング バグによって発生する可能性があります。 他の考えられる原因が排除されていれば、グラデーションが爆発しているときにグラデーション クリッピング (特に NLP の場合) を適用します。スキップ接続は、勾配降下法の問題を軽減するための一般的な手法です。 ResNet では、残差モジュールにより、入力が現在のレイヤーをバイパスして次のレイヤーに到達できるため、ネットワークの深さが効果的に増加します。 (7)スケーリング 入力機能をスケールします。通常、特徴量は平均がゼロになり、[-1, 1]などの特定の範囲になるようにスケーリングされます。フィーチャの不適切なスケーリングは、勾配の爆発または減少の最も一般的な原因の 1 つです。データを正規分布に近づけるために、トレーニング データから平均と分散を計算することがあります。検証データまたはテストデータをスケーリングする場合は、トレーニング データの平均と分散を再利用します。 (8)バッチ正規化とレイヤー正規化 各層の活性化関数の前のノード出力の不均衡は勾配問題のもう一つの大きな原因であり、必要に応じてバッチ正規化 (BN) を CNN に適用する必要があります。入力データが適切に正規化(スケーリング)されている場合、DN はより速く、より適切に学習します。 BN では、トレーニング データの各バッチから各空間位置での平均と分散を計算します。たとえば、バッチ サイズが 16 の場合、特徴マップの空間次元は 10X10 になり、100 個の平均と 100 個の分散 (位置ごとに 1 つ) が計算されます。各位置の平均は、16 個のサンプルからの対応する位置の平均であり、平均と分散を使用して各位置のノード出力を再正規化します。 BN はトレーニング時間を短縮しながら精度を向上させます。 ただし、RNN には BN は効果的ではないため、レイヤー正規化を使用する必要があります。 RNN では、RNN の再帰的性質と共有パラメータのため、BN からの平均と分散は RNN ユニットの出力を再正規化するのに適していません。レイヤー正規化では、出力は現在のサンプルのレイヤー出力から計算された平均と分散によって再正規化されます。 100 個の要素を持つレイヤーは、現在の入力からの平均分散のみを使用してレイヤーを再正規化します。 (9)ドロップアウト ドロップアウトをレイヤーに適用してモデルを正規化できます。 2015 年にバッチ正規化が普及して以来、ドロップアウトの人気は低下しました。バッチ正規化は、平均と標準偏差を使用してノード出力を再スケールします。これはノイズのように動作し、レイヤーが入力の変化に対してより堅牢に学習するように強制します。バッチ正規化は勾配降下問題の解決にも役立つため、徐々にドロップアウトに取って代わっていきました。 Dropout と L2 正則化を組み合わせる利点はドメイン固有です。通常、チューニング プロセス中にドロップアウトをテストし、その利点を実証するための経験的データを収集できます。 (10)活性化関数 DL では、ReLU が最も一般的に使用される非線形活性化関数です。学習率が高すぎると、多くのノードのアクティベーションがゼロになる可能性があります。学習率を変更しても効果がない場合は、リーキー ReLU または PReLU を試すことができます。リーキー ReLU では、x < 0 の場合、0 を出力しませんが、小さな下向きの傾斜 (0.01 など、またはハイパーパラメータによって設定) が事前に定義されます。パラメトリック ReLU (PReLU) がさらに一歩前進しました。各ノードにはトレーニング可能な傾斜があります。 (11)データセットを分割する 実際のパフォーマンスをテストするために、データを 3 つの部分に分割しました。トレーニング用に 70%、検証用に 20%、テスト用に 10% です。各データセットおよびトレーニング サンプルの各バッチでサンプルが十分にシャッフルされていることを確認します。トレーニング プロセスでは、トレーニング データセットを使用して、さまざまなハイパーパラメータを持つモデルを構築します。検証データセットを使用してこれらのモデルを実行し、最も精度の高いモデルを選択します。しかし、安全のため、最終的な健全性チェックにはテスト データの 10% を使用します。テスト結果が検証結果と大幅に異なる場合は、データをさらに完全にシャッフルするか、より多くのデータを収集する必要があります。 (12)ベースライン ベースラインを設定すると、モデルの比較やデバッグが容易になります。たとえば、分類問題のベースラインとして VGG19 モデルを使用できます。あるいは、問題を解決するために、確立されたいくつかの単純なモデルを拡張することから始めることもできます。これにより、問題をより深く理解し、比較のためのパフォーマンス ベースラインを確立できるようになります。私たちのプロジェクトでは、確立された GAN 実装を変更し、ジェネレーター ネットワークをベースラインとして再設計しました。 (13)チェックポイント 比較のために、モデルの出力とメトリックを定期的に保存します。場合によっては、モデルの結果を再現したり、モデルを再ロードしてさらにトレーニングしたりする必要があります。チェックポイントを使用すると、モデルを保存して後で再ロードすることができます。ただし、モデル設計が変更された場合、古いチェックポイントをすべて読み込むことはできません。また、Git タグを使用して複数のモデルを追跡し、特定のチェックポイントに対して正しいモデルをリロードします。私たちの設計では、チェックポイントごとに 4 GB を使用します。クラウド環境で作業する場合は、それに応じて適切なストレージを構成する必要があります。当社では Amazon クラウドインスタンスを頻繁に起動および終了するため、すべてのファイルを Amazon EBS に保存して簡単に再接続できるようにしています。 (14)カスタムレイヤー ディープラーニング パッケージの組み込みレイヤーは、より適切にテストされ、最適化されました。ただし、レイヤーをカスタマイズする場合は、次の操作を行う必要があります。
(15)正規化 ディープラーニングにおける大きな課題の 1 つは再現性です。デバッグ中、初期モデル パラメータがセッション間で変化し続けると、デバッグが困難になります。したがって、すべての乱数ジェネレータのシード値を明示的に初期化しました。私たちのプロジェクトでは、Python、NumPy、TensorFlow のシード値を初期化しました。微調整中は、シード初期化をオフにして、実行ごとに異なるモデルを生成しました。モデルの結果を再現するには、チェックポイントを作成して後で再ロードします。 6. オプティマイザー Adam オプティマイザーは、ディープラーニングで最も人気のあるオプティマイザーの 1 つです。これは、スパース勾配やノイズ勾配を持つモデルを含む、さまざまな問題に適用できます。微調整が簡単なので、すぐに良い結果を得ることができます。実際には、デフォルトのパラメータ設定は通常は正常に機能します。 Adam オプティマイザーは、AdaGrad と RMSProp の利点を組み合わせたものです。 Adam は各パラメータに対して同じ学習率を使用し、学習の進行に応じてそれらを個別に適応させます。 Adam は、勾配の履歴情報を利用する運動量ベースのアルゴリズムです。したがって、勾配降下法はよりスムーズに実行され、大きな勾配と大きな学習率によって引き起こされるパラメータ振動の問題を抑制できます。 Adam には 4 つの設定可能なパラメータがあります。
β (運動量) は、勾配に関する履歴情報を蓄積することで勾配降下法を滑らかにします。通常、初期段階では、デフォルト設定で十分に機能します。それ以外の場合、最も変化する可能性が高いパラメータは学習率です。 7. 結論 ディープラーニング プロジェクトの主な手順を簡単にまとめると次のようになります。 • タスクの定義 (オブジェクト検出、線画のカラー化)• データセットの収集 (MS Coco、公開 Web サイト) ◦ 学術データセットとベースラインの検索 ◦ 独自のデータセットの構築 (Twitter、ニュース、Web サイトなど)• メトリックの定義 ◦ 確立されたメトリックの検索• データのクリーニングと前処理 ◦ 機能の選択とデータの変換 ◦ ワンホット ベクトル、バッグ オブ ワード、スペクトログラムなど ◦ バケット化、対数スケール、スペクトログラム ◦ ノイズまたは外れ値の削除 ◦ 無効データと重複データの削除 ◦ データのスケーリングまたはホワイトニング• トレーニング、検証、テスト用にデータセットを分割 ◦ データの視覚化 ◦ データセットの検証• ベースラインの確立 ◦ ベースラインのメトリックの計算 ◦ 改善領域のエラーの分析• ネットワーク構造の選択 ◦ CNN、LSTM…• ディープ ネットワークの実装 ◦ コードのデバッグと検証 ◦ パラメーターの初期化 ◦ 損失とメトリックの計算 ◦ ハイパーパラメーターの選択 ◦ 結果の視覚化、検証、要約 ◦ エラーの分析 ◦ レイヤーとノードの追加 ◦ 最適化•ハイパーパラメータの微調整• モデルのバリエーションをお試しください パート 4: ディープ ニューラル ネットワーク モデルとメトリックの視覚化 ディープ ニューラル ネットワークのトラブルシューティングに関しては、多くの場合、人々はあまりにも早く、あまりにも早く結論に飛びついてしまいます。トラブルシューティングの方法を知る前に、何時間もかけて障害を追跡する前に、何を探すべきかを考える必要があります。このパートでは、ディープラーニング モデルとパフォーマンス メトリックを視覚化する方法について説明します。 1. テンソルボード 各アクションを追跡し、各ステップで結果を確認することが非常に重要です。 TensorBoard のような事前に構築されたパッケージの助けを借りれば、モデルとパフォーマンス メトリックの視覚化がほぼ瞬時に簡単になり、成果も得られます。 2. データの可視化(入力、出力) モデルの入力と出力を検証します。モデルにデータを入力する前に、視覚的な検証用にトレーニング サンプルと検証サンプルをいくつか保存します。データの前処理をキャンセルします。ピクセル値を[0, 255]に戻します。複数のバッチをチェックして、同じバッチのデータが重複していないことを確認します。左下の画像はトレーニングサンプルで、右下の画像は検証サンプルです。 入力データを検証するためにヒストグラムを使用すると便利な場合があります。理想的には、0 を中心とし、-1 から 1 の範囲にする必要があります。特徴が異なるスケールである場合、勾配は減少するか、または爆発します (学習率によって異なります)。 対応するモデルの出力は、検証とエラー分析のために定期的に保存されます。たとえば、検証出力の色は少し明るくなります。 3. メトリクス(損失と精度) 損失と精度を定期的に記録するだけでなく、それらを記録してプロットし、長期的な傾向を分析することもできます。次の図は、TensorBoard に表示される精度とクロスエントロピー損失を示しています。 損失をプロットすると、学習率を調整するのに役立ちます。損失が長期にわたって増加している場合は、学習率が高すぎることを示しています。学習率が低い場合、学習速度は遅くなります。 学習率が高すぎる別の実際の例を示します。損失関数が突然増加していることがわかります (おそらく勾配の突然の増加が原因です)。 精度マップを使用して正規化係数を調整します。検証とトレーニングの精度に大きなギャップがある場合、モデルは過剰適合しています。過剰適合を軽減するには、正規化係数を増やす必要があります。 4. まとめ 重みとバイアス: 重みとバイアスを厳密に監視します。次の図は、さまざまなトレーニング反復におけるレイヤー 1 の重みとバイアスを示しています。大きな(正または負の)重みを持つことは正常ではありません。正規分布した重みは、トレーニング プロセスがスムーズに進んでいることを示します (ただし、必ずしもそうとは限りません)。 活性化: 勾配降下法が最適なパフォーマンスを達成するには、活性化関数の前のノード出力が正規分布している必要があります。そうでない場合は、畳み込み層にバッチ正規化を適用するか、RNN 層に層正規化を適用する可能性があります。活性化関数の後の非アクティブノード (活性化 0) の数も監視します。 勾配:各レイヤーの勾配を監視して、最も深刻な深い学習問題の1つである消失または爆発の勾配を識別します。勾配が右端の層から左端の層まで急速に低下すると、消失する勾配の問題があります。 これは一般的ではない場合があります。CNNフィルターを視覚化しました。モデルによって抽出された機能のタイプを識別します。下の図に示すように、最初の2つの畳み込み層は境界と色を検出します。 CNNの場合、機能マップが学習していることを確認できます。以下の図は、特定のグラフ(右側)の最高のアクティベーション関数を持つ9つの画像をキャプチャします。また、デコンボリューションネットワークを使用して、機能マップ(左)から空間画像を再構築します。 畳み込みネットワークの視覚化と理解、Matthew D Zeiler et al。 このタイプの画像の再構築はめったに実行されません。しかし、生成モデルでは、1つの潜在因子を変化させ、他の因子を固定することがよくあります。モデルがインテリジェントに学習しているかどうかを確認します。 カプセル、サラサブール、ニコラスフロススト、ジェフリーEヒントン間のダイナミックルーティング パート5:ディープラーニングネットワークのデバッグ 1。深い学習のための問題解決手順 初期の開発では、同時に複数の問題に遭遇します。前述のように、ディープラーニングトレーニングは数百万の反復で構成されています。バグを見つけるのは非常に難しく、クラッシュしやすいです。簡単に始めて、徐々に変更を加えます。コードをデバッグした後、正規化などのモデルの最適化を行うことができます。機能最初の方法でモデルを検査します。
深い学習をデバッグする最良の方法は、少量のトレーニングデータをモデルに過剰に装備することです。数千の反復内で損失が減少しない場合は、コードをさらにデバッグします。あなたの精度が盲目の推測の概念を超えると、あなたは最初のマイルストーンを達成しました。次に、モデルを変更します。完全なトレーニングデータを使用して、ネットワークレイヤーとカスタマイズを開始します。 立ち往生している場合は、すべてを削除して、より小さな問題からやり直してください。 2。ハイパーパラメーターを初期化します 多くのハイパーパラメーターは、モデルの最適化により関連しています。ハイパーパラメーターをオフにするか、デフォルト値を使用します。 Adam Optimizerを使用して、高速で効率的で、デフォルトの学習率が良好です。初期の問題は、モデルの設計や微調整の問題ではなく、主にバグから生じました。微調整する前に、次のチェックリストを通過します。これらの問題はより一般的で、チェックしやすいです。損失が減少していない場合は、学習率を調整します。損失値がゆっくりと減少しすぎる場合は、学習率を10増加させます。損失値が上昇するか、勾配が爆発すると、学習率は10増加します。損失値が徐々に減少するまで、このプロセスを繰り返します。典型的な学習率は1〜1E-7です。 3。チェックリスト データ:
モデル:
4。重みの初期化 すべての重みを0に初期化することは最も一般的な間違いであり、深いネットワークは何も学びません。重みは、ガウス分布に従って初期化する必要があります。 5。スケーリングと正規化 スケーリングと正規化はよく理解されていますが、最も無視された問題の1つであり続けています。入力機能とノード出力の両方が正規化されている場合、モデルをトレーニングする方が簡単です。これが正しく行われない場合、学習率とともに損失は減少しません。入力機能のヒストグラムとノードの各層の出力を監視する必要があります。入力を適切にスケーリングします。ノードの出力の場合、完全な形状は平均ゼロであり、値が大きすぎる(正または負)。このレイヤーの勾配問題に遭遇していない場合、バッチ正規化は畳み込み層で行われ、レイヤー正規化はRNNユニットで行われます。 6。損失関数 損失関数の精度を確認してテストします。モデルの損失値は、ランダム推測値よりも低くなければなりません。たとえば、10カテゴリ分類問題では、ランダム推測された交差エントロピー損失は-LN(1/10)です。 7。分析エラー パフォーマンスの低下(エラー)を確認し、改善し、エラーを視覚化します。私たちのプロジェクトでは、モデルのパフォーマンスは、非常に絡み合った構造を持つ画像には良くありません。たとえば、小さなフィルターを備えた畳み込みレイヤーを追加して、小さな機能を取り外します。必要に応じて、データを強化するか、モデルをより適切にトレーニングするために、より類似したサンプルを収集します。一部のシナリオでは、これらのサンプルを削除して、より焦点を絞ったモデルに制限することをお勧めします。 8。正規化と改良 合理的な予測が行われるまで、正規化(モデルを過度に適合させる)をオフにします。 モデルコードが機能すると、調整される次のパラメーターが正則化係数です。トレーニングデータの量を増やし、正規化を増やして、トレーニングと検証の精度の違いを狭める必要があります。モデルを少し過剰にしたいので、やり過ぎないでください。データを綿密に監視し、コストを正規化します。長期的な規模では、正則化の損失はデータ損失を制御してはなりません。大規模な正規化を使用できない場合は、2つの精度間のギャップを狭めることができない場合は、最初に正則化コードまたはメソッドを廃止します。 学習レートと同様に、テスト値を対数プロポーション、たとえば最初の1/10などの変更を変更します。各正規化係数は完全に異なる桁である可能性があり、これらのパラメーターを繰り返し調整できることに注意してください。 9。複数の損失関数 最初の実装では、複数のデータ損失関数の使用を避けます。各損失関数の重みは、桁違いに異なる場合があり、調整するためにある程度の努力が必要です。損失関数が1つしかない場合、学習率のみを気にすることができます。 10。変数を固定しました 事前に訓練されたモデルを使用すると、特定のレイヤーのモデルパラメーターを修正して、計算を加速できます。変数固定エラーがないか確認してください。 11。単位テスト めったに言及されていないように、コードが変更されたときに実装が堅牢なままになるように、コアモジュールをユニットテストする必要があります。そのパラメーターがランダム化器で初期化されている場合、ネットワークレイヤーの出力を確認するのは簡単ではありません。さらに、入力データを模倣して出力を確認できます。各モジュール(レイヤー)について、次を確認できます。
12。次元の不一致 テンソルの形状(マトリックス)を追跡し、コードにアーカイブするため。形状が[n、チャネル、w、h]であるテンソルの場合、w(幅)とh(高さ)が同じ寸法を持っている場合、2つの間のコードを交換する際にエラーはありません。したがって、非対称形状を使用してコード単位テストを実行する必要があります。たとえば、テストには[4、4]の代わりに[4、3]テンソルを使用します。 パート6:ディープラーニングモデルのパフォーマンスとネットワークパラメーターの調整を改善する 1。モデル容量を改善します モデル容量を増やすために、徐々にレイヤーとノードをディープネットワーク(DN)に追加できます。より深いレイヤーは、より複雑なモデルを出力します。フィルターサイズを削減することもできます。より小さなフィルター(3×3または5×5)は、通常、より大きなフィルターよりも優れたパフォーマンスを発揮します。 パラメーターを調整するプロセスは、理論よりも実践に重点を置いています。レイヤーとノードを徐々に追加して、モデルを普通に下げることができるためです。精度が改善されなくなるまでこの反復プロセスを繰り返し、コンピューティングパフォーマンスのトレーニングと分解の価値がなくなります。 ただし、GPUの記憶は限られています。 2018年初頭、ハイエンドグラフィックカードNvidia Geforce GTX 1080 Tiには11GBのメモリがあります。 2つのアフィンレイヤー間の非表示ノードの最大数は、メモリサイズによって制限されます。 非常に深いネットワークの場合、グラデーションの消失の問題は深刻です。この問題を軽減するために、ジャンプ接続(ResNetの残留接続と同様)を追加できます。 2。モデルとデータセットの設計変更 パフォーマンスを改善するためのチェックのリストは次のとおりです。
関数をアクティブにする前に、活性化ヒストグラムを綿密に監視する必要があります。サイズが大きく異なる場合、勾配降下は効果がありません。正規化を使用します。ディープネットワークに多数の無効なノードがある場合、問題をさらに追跡する必要があります。これは、バグ、重量の初期化、または勾配消失によって引き起こされる場合があります。いずれもいない場合は、漏れやすいleluなどのいくつかの高度なRelu機能を試してください。 3.データセットの収集とクリーニング 独自のデータセットを作成したい場合は、最善のアドバイスは、サンプルを収集する方法を詳しく調べることです。最適なリソースを見つけ、問題に関係のないすべてのデータを除外し、エラーを分析します。私たちのプロジェクトでは、非常に絡み合った構造を持つ画像のパフォーマンスが非常に低くなりました。モデルを変更するために、畳み込みレイヤーと小さなフィルターを追加できます。しかし、モデルはすでにトレーニングが困難です。さらなるトレーニングのためにさらにエンタングルメントサンプルを追加できますが、すでにたくさんあります...別の方法:プロジェクトの範囲を改良し、サンプルの範囲を狭めることができます。 4。データ強化 ラベル付きデータの収集は高価です。写真の場合、回転、ランダムクリッピング、シフトなどのデータ増強方法を使用して、既存のデータを変更してより多くのデータを生成することができます。色の歪みには、色相、飽和、および露出のオフセットが含まれます。 5。半教師の学習 また、非標識データを使用してトレーニングデータを補完することもできます。モデルを使用してデータを分類します。対応するラベル予測でデータセットをトレーニングするために、自信の高い予測を備えたサンプルを追加します。 6。調整 (1)学習率の調整 まず、学習率を調整する方法を簡単に確認しましょう。開発の初期段階では、非批判的なハイパーパラメーターをオフにするか、正規化を含む0に設定しました。 Adam Optimizerを使用すると、デフォルトの学習率は通常うまく機能します。コードに自信があるが、損失が低下しない場合は、学習率を調整する必要があります。典型的な学習率は1〜1E-7です。学習率を毎回10%引き下げ、損失を綿密に監視するために短い反復でテストします。それが上昇し続けると、学習率が高すぎます。低下しない場合、学習率は低すぎます。損失がより滑らかになるまで学習率を改善します。 学習率が高すぎることを示す実際のサンプルがあります。これにより、コストが突然増加します。 実際には使用されていませんが、人々はW比の更新を監視しています。
(2)ハイパーパラメーターの調整 モデル設計が安定した後、モデルをさらに調整できます。最も頻繁に調整されたハイパーパラメーターは次のとおりです。
a 通常のバッチサイズは8、16、32、または64です。バッチサイズが小さすぎると、勾配降下が滑らかになり、モデルがゆっくりと学習され、損失が振動する場合があります。バッチサイズが大きすぎる場合、トレーニングの反復(更新の1ラウンド)を完了するには時間がかかりすぎて、結果が小さくなります。私たちのプロジェクトでは、各トレーニングの反復が時間がかかりすぎるため、バッチサイズを下げます。全体的な学習速度と損失を綿密に監視します。損失が激しく振動する場合、バッチサイズの削減が大きすぎることがわかります。バッチサイズは、正規化係数などのハイパーパラメーターに影響します。バッチサイズを決定したら、通常は値をロックします。 b 上記の方法を使用して、学習率と正則化係数をさらに調整できます。学習率と検証とトレーニングの精度の間のギャップを制御するために損失を監視し、それにより正規化係数を調整します。学習率を10%削減する代わりに、それを3%下げました(細かい調整では小さいかもしれません)。 パラメーターの調整は線形プロセスではありません。ハイパーパラメーターは関連しており、ハイパーパラメーターを繰り返し調整します。学習率と正規化要因は非常に相関しており、時には一緒に調整する必要があります。時間の無駄かもしれないので、早めに調整を加えないでください。設計が変更された場合、これらの努力は無駄になります。 c ドロップアウト率は通常20%から50%です。 20%から始めましょう。モデルが過剰に搭載されている場合、値は増加します。 d
モデルパラメーターのスパース性により、計算の最適化が容易になり、エネルギー消費が削減されます(これはモバイルデバイスにとって重要です)。必要に応じて、L2正規化をL1正規化に置き換えることができます。 Reluは最も人気のある活性化関数です。いくつかの深い学習競争では、人々はより高度なリレーションバリエーションを使用して精度を向上させます。一部のシナリオでは、無効なノードを減らすこともできます。 e高度なパラメーター調整 いくつかの高度で詳細なパラメーター調整方法:
固定学習率を使用する代わりに、学習率を定期的に引き下げます。ハイパーパラメーターには、学習率の低下の頻度と振幅が含まれます。たとえば、学習率を100,000回の反復あたり0.95減らすことができます。これらのパラメーターを調整するには、コストを監視して、パラメーターがより速く低下しますが、スムーズすぎないことを判断する必要があります。 高度なオプティマイザーは、勢いを使用して勾配降下プロセスをスムーズにします。 Adam Optimizerには2つの運動量設定があり、それぞれ1次(デフォルト0.9)と2次(デフォルト0.999)運動量を制御します。 NLPなどの急な勾配降下の問題領域の場合、運動量値をわずかに増加させることができます。 検証エラーが増加し続けると、トレーニングを停止することにより、過剰フィッティングを軽減できます。 ただし、これは概念の視覚化にすぎません。リアルタイムエラーは一時的に上昇し、再び下落する可能性があります。モデルを定期的に確認し、対応する検証エラーを記録できます。後でモデルを選択しましょう。 7。グリッド検索 一部のハイパーパラメーターは非常に相関しています。対数スケールで確率グリッドを使用して一緒に調整する必要があります。たとえば、2つのハイパーパラメータλとγについて、対応する初期値から始めて、各ステップで10回減少します。
対応するグリッドは[(e-1、e-3)、(e-1、e-4)、…、(e-8、e-5)、および(e-8、e-6)になります。 明確な交差点を使用する代わりに、これらのポイントをわずかにランダムに移動しました。このランダム性は、いくつかの隠された特性を発見するのに役立ちます。最良のポイントがグリッドの境界(青い点)にある場合、境界領域で再テストします。 グリッド検索は非常に計算的に集中的です。小規模なプロジェクトでは、散発的に使用されます。粗粒のパラメーターをより少ない反復で調整し始めました。後の微細な調整フェーズでは、より長い反復を使用し、値を3(または低い)に調整します。 8。モデルコレクション 機械学習では、予測を行うために決定ツリーから投票することができます。判断エラーは通常、ローカルな性質のものであるため、この方法は非常に効果的です。両方のモデルで同じエラーが発生する可能性は非常に少ないためです。ディープラーニングでは、ランダム推測でトレーニングを開始できます(明示的な設定なしでランダムシードを送信)、最適化モデルも一意ではありません。検証データセットを使用して、最高のパフォーマンスモデルを複数回テストおよび選択することも、複数のモデルを内部的に投票して最終的に予測結果を出力することもできます。この方法には複数のセッションが必要です。これは、システムリソースにとって間違いなく非常に費用がかかります。また、一度トレーニングし、複数のモデルを調べてから、プロセスで最高のパフォーマンスモデルを選択することもできます。アンサンブルモデルを通じて、これらに基づいて正確な予測を行うことができます。
モデルセットは、いくつかの問題の予測精度を改善するのに非常に効果的であり、深い学習データ競争のチームによってしばしば採用されます。 9。モデルの改善 モデルの微調整に加えて、モデルのさまざまなバリエーションを使用してパフォーマンスを向上させることもできます。たとえば、標準のLSTMを置き換えるために、色ジェネレーターを部分的または完全に使用することを検討する場合があります。この概念は見知らぬ人ではありません。階段で絵を描くことができます。 直感的に言えば、画像生成タスクに時系列のメソッドを導入することは有利です。これは、ドローで証明されています:画像生成のための再発性ニューラルネットワーク。 微調整とモデルの改善:大幅なパフォーマンスの改善は、多くの場合、モデル設計の変化です。ただし、モデルを微調整すると、機械学習のパフォーマンスも向上する場合があります。最終的な判断は、対応するタスクのベンチマークテスト結果に依存する場合があります。 10。Kaggle 開発プロセス中に、次のような簡単な質問がある場合があります。リークReluを使用する必要がありますか?質問が単純な場合もありますが、どこでも答えを見つけることはできません。いくつかの論文では、リークリレーションの優位性が見られますが、他のプロジェクトにはパフォーマンスの改善が示されていない経験があります。アイテムが多すぎて変数が多すぎると、複数の可能性を測定する検証結果がありません。 Kaggleは、深い学習が重要な部分であるデータサイエンス競争のためのオープンなプラットフォームです。優れたプレイヤーのいくつかの方法を深く見ると、最も一般的なパフォーマンスインジケーターを見つけることができる場合があります。さらに、一部のデータ競争チームは、独自のコード(Kernelと呼ばれる)オープンソースをアップロードします。探索するように注意してください、Kaggleは素晴らしい情報源になります。 11。実験フレームワーク 深い学習開発には多くの経験が必要であり、ハイパーパラメーターの調整は非常に退屈な作業です。実験的なフレームワークを作成すると、このプロセスをスピードアップできます。例:一部の人は、調整のためにモデル定義を文字列に外部化するためのコードを開発します。ただし、これらの努力は通常、小さなチームに利益をもたらすものではありません。私の経験では、コードのシンプルさとトレーサビリティの喪失は、そうすることの利点よりもはるかに大きくなります。つまり、コードを簡単に変更することは困難です。読みやすいコードには、簡潔で柔軟な機能が必要です。対照的に、多くのAIクラウド製品は、ハイパーパラメーターを自動的に調整する機能を提供し始めています。このテクノロジーはまだ初期段階にありますが、人間に独自のフレームワークを書くことを要求しないプロセスは、常にこの傾向に注意を払う必要があります。 12。結論 これで、調整されたモデルがあり、正式に展開できます。この一連のチュートリアルが役立つことを願っています。深い学習は、多くの問題を解決するのに役立ちます。それはあなたの想像力を超えています。フロントエンドのデザインの代わりにディープラーニングを使用したいですか? オリジナルリンク:
[この記事は51CTOコラム「Machine Heart」、WeChatパブリックアカウント「Machine Heart(id:almosthuman2014)」によるオリジナル翻訳です] この著者の他の記事を読むにはここをクリックしてください |
<<: AI人材獲得をめぐる世界的な戦いにおいて、子どものプログラミングはどれほどの影響力を持つことができるのでしょうか?
>>: 2018年に「ブロックチェーン+人工知能」について知っておくべきこと
小売業の経営者は、長期的な顧客関係の構築を妨げる在庫管理の問題に直面することがよくあります。小売在庫...
データ サイエンスと機械学習の分野では、多くのモデルはデータが正規分布していると想定しているか、デー...
人工知能とは何でしょうか? この質問に対する答えは、誰に尋ねるかによって異なります。 1950 年代...
[[402984]]研究によると、人工知能と 5G テクノロジーを組み合わせることで、通信会社は I...
ディープラーニング技術を用いた自然言語の深い理解は、常に注目されてきました。自分で音楽を調べる必要が...
人類はアフリカでホモ・サピエンスとして誕生して以来、約50万年にわたる進化の過程を経てきました。人類...
近年の科学技術の急速な発展に伴い、人工知能の概念が徐々に明確になってきています。特にOTT業界の重要...
[[189519]]インテリジェントな需要は2つの側面に反映されるモバイル インターネットの発展が新...
現在、AIはデジタル変革においてより重要な役割を果たしています。デジタル変革プロセス全体は、「クラウ...
[[217139]]この記事では、k-means アルゴリズムを使用して画像の色を復元することを提案...
[[348375]]この記事はWeChatの公開アカウント「Java Chinese Commun...