深層学習コードを効率的に読み取る: コードを迅速かつ適切に取得する方法のロジックとアイデア

コードの読み取りの問題だけを取り上げてツイートとして書くかどうか、私は長い間迷っていました。結局のところ、コードを読むということは、誰でも読むことができるのです。さらに、私が個人的に読んだり書いたりしたコードの量は、すべての人がコードを読めるようにするには十分ではありません。しかし、著者は少し大胆に書くことにしました。これは、今後自分がコードを読むときの基準を設定するためと、これまでに実践したことのないいくつかの方法を参考のために書き留めるためです。不適切な場合はご相談ください。

ディープラーニングに取り組む人にとって、日常生活で欠かせないのは論文を読むことに加えてコードを読むことです論文の読み方については前回の記事を参照していただきたいのですが、どうやって読むのか、どんなスキルを使って読むのかは人によって意見が異なるので、ここでは多くは言いません。コードを読むことは、論文を読むことや本を読むことに似ています。結局のところ、それらはすべて読書の性質にあります。しかし、繰り返しになりますが、コードを読むことは、論文を読むこととは大きく異なります。コードは、論文内のモデルとアルゴリズムを実装するプロセスであり、常にオンラインで思考する必要があるプロセスです。また、私たちが読むのはLinux カーネル コードのような分厚い本ではなく、ディープ ラーニングプロジェクトのコードであるため、コードの性質は多少異なります。

ここで著者が言及した深層学習プロジェクトのコードは、数百行のテスト デモから数千万行のオープンソース プロジェクトに至るまで、さまざまな方法で読み取る必要があります。次の図は、Mask R-CNN プロジェクト コードと PyTorch ソース コードの比較を示しています。

 

Mask R-CNN は古典的なインスタンス セグメンテーション フレームワークであることがわかり、そのコード量は非常に満足のいくものであると言え、論文を読み終わった数日後には 3k のコード量をほぼ費やすことができます。ただし、PyTorch のソース コードは、ほとんどの人にとってそれほどフレンドリーではありません。コード量は 750k で、基盤となる C++ コードがプロジェクト全体の半分を占めます。深層学習の研究に関する限り、それは可能性があります。ジャイアントレベルと呼ばれます。この量のコードは、初心者が PRML のコピーを入手するようなもので、多くの場合、それに多くのエネルギーを注いでいるにもかかわらず、何も起こりません。したがって、この 2 種類のプロジェクトコードでは、必ず読み取り方法が異なります。

コードを読む目的、シーン、対象が異なるため、深層学習プロジェクトのコードの読み方を3つの側面から著者が解説します。

コードを読む一般的な方法

最初にコードを読むための一般的な方法をいくつか示します。この点は深層学習プロジェクトのコードに限定されるものではなく、あらゆるプロジェクト、あらゆる言語でのコード読み取りに当てはまります。私たちの毎日のコード読み取りは 2 つのツールにすぎません。1 つは、コードをローカルにダウンロードし、IDLE を開き、IDLE で静かに読み取ることです。

GitHub の Web 側の直接読み取り

GitHub の Web 側で直接読み込むのですが、GitHub はエディタのように左側に読み込みディレクトリが設定されておらず、コードファイルを入力するたびに終了して別のファイルに入る必要があり、ユーザーエクスペリエンスが非常に悪いです。もちろん、これはどれも問題ありません。Chrome には Octotree などの補助的な読み取りプラグインが用意されており、Chrome 拡張機能で直接検索してインストールできます。

インストール後、Web 側で IDLE によるコードの直接読み取りを体験できます。

ページの左側に IDLE のようなディレクトリ バーがあることがわかります。これにより、プロジェクト コードの表示と読み取りが大幅に容易になります。これは一般的なメソッドのツール レベルです。いくつかの基本的な読み取りルールを見てみましょう。IDLE および Octotree ツールを使用する場合、最初のポイントは、コード ディレクトリを注意深く調べて、プロジェクト全体のコード構造と分布を全体的に理解することです。深層学習の場合、ディレクトリ内のモジュールは通常、次のように比較的固定されています。モデル ディレクトリ モデルの構築とトレーニング用のコードは conifg ディレクトリに配置され、モデルの一部の設定ファイルは conifg ディレクトリに配置され、プロジェクトで使用されるデータ情報は data ディレクトリに配置されます。セマンティック セグメンテーション プロジェクトのディレクトリ構造は次のとおりです。

ディープラーニングのプロジェクトコードの構造を理解した上で、たくさん読んでいくと自然と慣れてきて、その後の読書効率も上がります。

2 番目の一般的な方法は、Readme ドキュメントをすばやく見つけることです一般に、ルート ディレクトリにある Readme ドキュメントには、このコードの使用方法が含まれており、プロジェクトをすぐに理解するための重要な情報が含まれています。一般に、オープンソース プロジェクトの Readme では、作成者がコードの使用方法とデプロイ方法を説明します。次の図は、DenseNet の Readme ドキュメントです。

大規模なプロジェクトの場合、各サブディレクトリに Readme ドキュメントが存在する場合があります。この部分は注意深く読む必要があり、作成者はすべての重要な情報をこのドキュメントに入れています。したがって、これに関係なく、最初に Readme を読むことは必要なステップであり、プロジェクトを理解するための一般的な方法です。

一般的な方法の3つ目は、具体的な読み方です。つまり、読みのメインラインを決定する必要がありますこの点は、ディープ ラーニング プロジェクト コードの一般的な方法です。ディープ ラーニング プロジェクトの場合、一般に理解したい最も重要なポイントは、データ、モデル、およびそれらのトレーニング方法に他なりません。このオープンソース プロジェクトのテスト結果をすぐに確認したい場合は、Readme を読んで使用方法を確認してください。このプロジェクトの作成者が bert などの新しいモデル フレームワークを提案しており、そのモデル フレームワークの詳細を知りたい場合は、models ディレクトリで model という単語が含まれる .py ファイルを直接見つけて読み始めてください。あるいは、このプロジェクトがどのようにトレーニングされるか、どのようなトレーニング トリックが使用されるか、パラメーターがどのように初期化されるか、バッチ サイズがどのくらいの大きさか、トレーニング プロセス中に学習率がどのように調整されるかなどを確認したい場合もあるので、私は言いません。多くの場合、train を使用して .py ファイルを直接見つけます。fast-rcnn の 3 つのトレーニング ファイルを次の図に示します。

目的に応じて、モデルの本線であっても、電車であっても、データや構成などの他のブランチが読み取りプロセスに必ず関与します。メインラインの読み取りプロセス中にブランチについての理解を継続的に向上させると、時間が経つにつれて完全なプロジェクトが理解できるようになります。

上記は、深層学習プロジェクトのコードを読み取るための一般的な方法のいくつかです。2 つのシナリオのコード読み取りについて詳しく説明します。結局のところ、誰もが物事を行う際の目的に注意を払い、強い目的を持って何かを行うことが多く、一般に効率が特に高いです。

最初のシーンは、研究やプロジェクトを進める中で、誰もが問題に遭遇する場面ですこの問題を解決する方法がわかりません。また、Google が適切な方法を直接見つけられない場合も同様です。現時点では、GitHub で検索するとよいでしょう。たとえば、データが極端に不均衡な場合に損失関数に重みを付ける方法や、マルチラベル問題のモデル予測に最適な分類しきい値を見つける方法などを知りたいと考えています。これらは実際のプロジェクトを進めていく上で遭遇する可能性が高い問題ですが、GitHub 上で同様のシナリオの解決策を見つけることができれば、すぐにスッキリすると思います。

次の keras ベースの CNN マルチラベル分類プロジェクトでは、matthews_corrcoef を使用して、マルチラベル分類しきい値の最適化に最適な分類予測しきい値を決定します。matthews_corrcoef とは何かというと、これらは問題を解決する過程で学び、吸収する必要がある場所です。つまり、特定のプロジェクトのコードを意図的に読み取るということは、多くの場合、特定のブロックまたは数行の重要な行を読み取るだけであり、その数は多くなく、問題を解決できる可能性があります。

2 番目のシナリオは、自己改善のためにコードを読むことですいわゆる個人磨きは、個人の可処分時間が多く、自己規律が高く、学習能力が高く、能力を飛躍的に向上させるための鍵となります。**著者は時々 GitHub にアクセスしてコードを読みますが、個人的な改善のレベルに達するには程遠いです。たとえば、以前の PyTorch 750k ソース コードでは、これほど大量のコードがあるため、読み取り戦略は分割統治、分散包囲、個別破壊の考えでなければなりません。プロジェクトを分解し、読み取り計画と目標を設定しても、超実行でプロジェクトを完了することが可能です。これは常人がやることではありませんが、ディープラーニングの分野で上達できる人は常人ではないと思います。

ダウンロードしたコードが実行できない場合はどうすればよいですか?

ダウンロードしたコードが最初の実行まで実行されることはほとんどなく、ほとんどの場合、ローカル環境やパッケージのバージョンなどの問題によりエラーが報告されます。このとき、自分のバージョンがソースコードが提供する環境に適合しているかどうかを 1 つずつ確認する方法と、作成者に直接問い合わせるか、既存のコードの問題点を直接検索する方法があります。先人たちは自らが踏んだ落とし穴と解決策を提案した。これらの両方はさらに厄介です。

最近の chatgpt と gpt4 の人気により、バグの修正が容易になりました。たとえば、次の例は、誰もがよく知っていると思いますが、GPT4 は解決策を提供するだけでなく、このエラーが発生する理由も説明しています。

 GPT-4 は、大量のトレーニング データを学習することで人間の言語、さらにはコンピューター プログラミング言語を理解して生成できる大規模な自己回帰言語モデルです。コードのバグ修正におけるパフォーマンスは主に、多数のコード ベースおよび関連ドキュメントでのモデル トレーニングによるものです。興味がある場合は、https://gpt4test.com を使用してテストしてください。中国でも試すことができ、壁を越える必要はなく、サイトは安定しています。より複雑なバグの場合は、次のプロンプトを使用して gpt について質問できます。

次のコード (コピー コード) に基づいてバグ (コピー バグ) があります。元のコードに基づいて修正するのを手伝ってください。

GPT はバグの原因を突き止めるだけでなく、直接コピーして使用できる修正コードも提供しているので、試してみると徐々に gpt 向けのプログラミングができるようになると思います。

確かに、教科書を読むことでも、論文を読むことでも、この記事で言及されているコードを読むことでも、それ自体が個人の学習能力の向上と知識の獲得のプロセスであることは事実です。ディープ ラーニングに携わる私たちにとって、arxiv には無限の論文があり、GitHub にはコードが存在します。重要なのは、学習を継続し、生涯学習者になることです

 論文をよりよく読み、最先端の情報を理解するのに役立つように、私たちは、大規模言語モデル技術の開発をカバーする、最大 3,000 ページを含む、業界初の AI フルスタック マニュアルという本格的な資料を編集しました。 AIGC テクノロジー、深層学習テクノロジー、その他の AI の方向性の最新トレンドとアプリケーション。

WeChatの公開アカウントは「Xi Xiaoyao Technology Talk」をフォローし、「789」と返信して資料をダウンロードする。
[写真]

おすすめ

転載: blog.csdn.net/xixiaoyaoww/article/details/131604291