Skip to content

参考記事キュレーション【技術系】

Toma Kakizaki edited this page Mar 22, 2024 · 19 revisions

1. 機械学習・データサイエンス

モデリング・分析

 モデリングとは、現実世界のシステムやプロセスを数学的・統計的なモデルを使って表現するプロセスです。モデリングの目的は、現実世界の現象を理解・予測・最適化することにあります。AIエンジニアは、主に以下の2つのモデリングを業務で扱います。

  • 統計的モデリング

    ┗ データを分析し、トレンドやパターンを見つけ出す

  • 機械学習モデリング

    ┗ データから学習し、予測や分類を行うモデルを構築する

 分析とは、データや情報を調べ、検討し、解釈するプロセスです。これにより、データの意味や背景にあるパターン、関連性、トレンドなどを理解することができます。分析は、意思決定や戦略立案において重要な役割を果たします。

 まとめると、モデリングと分析は互いに補完し合う関係にあり、モデリングは現象を表現するフレームワークを提供し、分析はそのモデルを用いてデータを理解→洞察を得るためのプロセスです。これらの技術は、ビジネスの意思決定、科学的研究、技術開発など多岐にわたる分野で活用されています。

おすすめの書籍・記事

  • 分析モデル入門|ソシム
    • データサイエンスVtuverアイシア(の中の人)がまとめた、分析モデルに関する本。プログラムコードはないが、ML・DSの知識を網羅的に把握するのに最適。
  • 深層学習(機械学習プロフェッショナルシリーズ)|講談社
    • 深層学習の理論について、基礎的〜応用的な内容を幅広く学べる。コードがない&数式が多いため人は選ぶが、良書。
  • ディープラーニングを支える技術|技術評論社
    • (1)
      • 基礎的だが押さえておくべき深層学習の理論について、豊富なイラスト&カラーで把握できる。
    • (2)
      • 拡散モデル、Transformer、深層強化学習などの最新トピックについて、イラスト&カラーで把握できる。すでに機械学習の基礎を押さえているなら、2から読み進めても問題ないと思われる。
  • Python機械学習プログラミング[PyTorch&scikit-learn編]|インプレス
    • scikit-learnを使ったモデリング、クロスバリデーション、PyTorch、GANなど、機械学習に関して広く深く学べる書籍。かなり分厚い。
  • 最短コースでわかる PyTorch &深層学習プログラミング
    • PyTorchに関してコードを動かしながら学べる。また、数学的な話を直感的な説明に置き換えているため、読みやすい。
  • その他おすすめ:KaggleSIGNATEなどのコンペに出場
    • コンペは実際に企業が直面するような内容を解くケースが多く、勉強になる

論文実装

 AIエンジニアでの業務では、技術選定のタイミングで、論文のサーベイ→検証が必要になる場面も多いです。また、有益な論文であるがコードがない場合は、自身でその論文の内容を再現実装するケースもあるかと思います。再現実装は高いコーディング能力と、論文への理解力(数学力・英語力)が求められます。

おすすめの書籍・記事など

  • Papers with Code
    • 論文・データセット・コードがまとまっており、すぐに試せるものを探す場合に便利。ただし、コードが簡単には動かせない場合もある。
  • ChatPDFAssistants API
    • PDFを読み込ませて、そのPDFの内容をチャットで聞くことで、理解を深められる。

2. ソフト・ミドルウェア

Pythonの環境構築

 AIエンジニアの分析などの業務では、Pythonコードを書くことがほとんどだと思います。松尾研の講義などでPythonを触ったことがある方も多いかとは思いますが、このタイミングで今一度、環境構築について押さえておくことをお勧めします。

 また、プロジェクトごとに環境構築で使うツールが異なってくる場合もあります。その場合は、PMの指示に従って環境構築を行いましょう。

キーワード:pip、Poetry、Docker、Anaconda、PyCharm、rye

おすすめの書籍・記事など

環境変数の通し方

 環境変数を用いてコードを記述すると、柔軟にコードを設計できたり、見える場所に書きたくないコードを隠すことができます。後者は、OpenAIのAPIキーなどがわかりやすい例です。

 環境変数の扱いについてもプロジェクトによって異なると思いますが、Pythonのosライブラリや、python-dotenvライブラリを使う場合が多いです。

キーワード:

  • Pythonライブラリ → python-dotenv、os
  • その他 → .env、exportコマンド(linux)

おすすめの書籍・記事など

フォーマッタ・リンタ

 プロジェクトメンバー間や、先方エンジニアとコードを共有する上で、コードの記述アプローチに違いがある場合、コードの可読性の低下・コードレビューの時間倍増など、プロジェクトに悪影響をもたらすことがあります。

 そのような場合に、フォーマッタやリンタを用いることで、コードの品質向上、開発プロセス効率化が可能になります。フォーマッタがコードの書式を整え、リンタがコードの問題検出の役割をはたします。開発を円滑に進めるためにも、これらの基本的な知識は押さえておきましょう。

キーワード

  • フォーマッタ → Black、AutoPEP8、YAPF
  • リンタ → Pylint、Flake8、Mypy

おすすめの書籍・記事など

エディタ・IDE

 AIエンジニアの業務で Pythonを書く場合、主にVScode、またはGoogle Colabratory上で書くことが多いですが、そのほかにも、Amazon SageMakerや、Jupyter Notebook・Jupyter Lab、EmacsやVimなどが使われることもあるかと思います。プロジェクトでPMからの指示がある場合はそれを使うべきですが、エディタやIDEも奥が深いので、ご自身に合ったものを探してみてください。

おすすめの書籍・記事など

Git/Github

 Gitは、ソフトウェアの開発で使用される「バージョン管理システム」の一つです。プログラミングのプロジェクトにおいて、複数の開発者が同時に作業する場合、各開発者のコードの変更点を管理し、必要に応じて以前のバージョンに戻すことができます。Gitは、各開発者がプロジェクトのコピーを自分のコンピューターに持っており、変更を加えた後にそれを共有する「分散型」のシステムです。これにより、インターネット接続がなくても作業を続けることができ、後で変更を統合することが可能です。

 GitHubは、Gitのバージョン管理システムを使って、プロジェクトをインターネット上で管理するためのプラットフォームです。GitHubを使うことで、開発者は自分たちのプロジェクトをオンラインで保存し、変更履歴を追跡し、他の開発者と協力することができます。GitHubは、プロジェクトに関する「リポジトリ」と呼ばれるストレージスペースを提供し、そこにコードや文書、その他のファイルを置くことができます。開発者は、リポジトリを「フォーク」して自分のバージョンを作り、その後、オリジナルのプロジェクトに「プルリクエスト」を送って変更を提案できます。

 Git/Githubを使った開発は盛んに行われるため、基本を押さえましょう!

キーワード:マージ(merge)、ブランチ(branch)、コミット(commit)、push、pull

おすすめの書籍・記事

Docker

 Dockerは、アプリケーションをパッケージ化し、他の環境でも同じように動作させることを目的とした技術です。この技術は「コンテナ」と呼ばれる軽量な仮想化技術を使用しています。Dockerを使うことで、アプリケーションが動くために必要な環境(例えば、特定のソフトウェアやライブラリ)を一緒にパッケージ化し、異なるコンピューターシステム上でもそのアプリケーションを簡単に、そして一貫性をもって動かすことができます。伝統的な仮想化技術と比較して、Dockerのコンテナは非常に軽量で、起動が速く、リソース(CPUやメモリなど)の消費が少ないという特長があります。これは、DockerがホストOSのカーネルを共有し、各コンテナが必要なアプリケーションとその依存関係のみを含んでいるためです。

 開発者にとっては、Dockerを使用することで、自分のローカル開発環境と本番環境の間で「動かない問題」を軽減できます。また、複数のプロジェクトを同時に扱う際にも、それぞれのプロジェクトに必要な環境を容易に切り替えることができます。Dockerは、コマンドラインツールとして提供されており、Dockerfileという設定ファイルを使用してコンテナの設定を行います。このDockerfileには、アプリケーションの実行に必要な指示(使用するベースイメージ、実行するコマンド、コピーするファイルなど)が記載されています。Dockerのコンセプトはシンプルですが、実際の運用ではネットワーキングやデータの永続化、セキュリティなど、考慮すべき点が多くあります。しかし、その柔軟性と移植性は多くの開発者やシステム管理者にとって非常に魅力的なものです。

 本格的に開発をするPJTではよく用いられる技術なので、基本を押さえましょう!

キーワード:コンテナ・ビルド・Dockerfile・Docker Compose

おすすめの書籍・記事

クラウド

Azure

 Azureは、マイクロソフトが提供するクラウドコンピューティングプラットフォームです。このプラットフォームを利用することで、物理的なサーバーやデータセンターを自社で持つことなく、インターネット経由で様々なコンピューティングリソースを利用することができます。

 Azureでは、サーバーのホスティング、ストレージサービス、データベース管理、ネットワーキングなど、基本的なクラウドサービスを幅広く提供しています。これにより、企業はITインフラの運用コストを削減し、効率的にシステムを管理できます。特に、機械学習サービスに関しては、Azureは多様なツールとサービスを提供しています。

 例えば、「Azure Machine Learning」は、データサイエンティストや開発者が機械学習モデルを構築、トレーニング、デプロイするための包括的なサービスです。このサービスを使用することで、モデルの開発からデプロイメントまでのプロセスを簡素化し、効率化することができます。

 また、「Azure Cognitive Services」は、事前にトレーニングされた機械学習モデルをAPIとして提供するサービスで、ビジョン、音声、言語、意思決定といった分野で利用できます。これらのAPIを使用することで、アプリケーションに画像認識、自然言語処理、音声認識などの機能を簡単に統合できます。さらに、Azureには大規模なデータセットを高速に処理するための「Azure Databricks」などの高度なデータ分析ツールも用意されています。これらのツールを活用することで、機械学習プロジェクトのデータ処理や分析の効率を高めることが可能です。

 また他のクラウドと比べた場合の優位点として、Azure OpenAI Serviceの存在があります。Azure OpenAI ServiceのAPIはOpenAI APIよりも挙動が安定してる(トラフィックなどの影響を受けない)、Azureによりセキュリティが担保されている、などの多くの利点があるため、ChatGPT系のサービスを構築する場合はAzure OpenAI Serviceの使用は有力候補となります。

 機械学習サービスを提供する会社にとって、Azureは強力なバックエンドを提供し、より複雑で高度な機械学習モデルの開発と運用を支援する重要なツールです。データ処理からモデルのトレーニング、運用まで、様々な段階で役立つ機能が豊富に揃っています。

キーワード:Azure OpenAI Service、Azure Machine Learning、Azure AI Search(旧Azure Cognitive Search)、Document Intelligence(旧Form Recognizer)

おすすめの書籍・記事

AWS

 AWS(Amazon Web Services)は、アマゾンが提供するクラウドコンピューティングプラットフォームです。このプラットフォームは、様々なサービスを提供しており、インターネットを通じて利用できます。AWSの利点は、物理的なサーバーやデータセンターを所有する必要がなく、必要に応じてリソースを追加・削除できる柔軟性とコスト効率の高さにあります。

 AWS、Azure、GCPの中では、企業で一番使われているサービスかと思いますが、OpenAI系のサービスと相性が悪いため、近年の機械学習系のサービス提供においてはAzureの方が優勢かと思います。しかし、ChatGPTに性能で迫る「Claude」というAmazonが開発したモデルを使えるなど、AWSを使用する機会も十分に考えられます。

キーワード:AWS Bedrock、Amazon SageMaker、Amazon Rekognition、Amazon Lexm、Claude

おすすめの書籍・記事

GCP

 GCP(Google Cloud Platform)は、Googleが提供するクラウドコンピューティングのサービス群です。GCPは、サーバー、ストレージ、データベース、ネットワーキング、ビッグデータ処理、機械学習など、多岐にわたるクラウドサービスを提供しています。物理的なインフラストラクチャの管理をGoogleに委ねることで、開発者はアプリケーションの開発やデータの分析に集中できます。

 GCPを使用することで、機械学習プロジェクトの開発サイクルを加速し、コストを削減しながら、スケーラブルで安定したインフラストラクチャ上で機械学習モデルを運用することができます。また、Googleの先進的な機械学習技術を活用することが可能です。

 しかし、LLM系のサービスを構築するとなるとChatGPTを使えるAzureや、Claudeを使えるAWSの方が優勢である印象です。

キーワード:Google AI Platform、AutoML、BigQuery ML、Dialogflow

おすすめの書籍・記事

3. 実験管理・MLOps

Weight&Bias

 Weight & Bias(ウェイト・アンド・バイアス)は、機械学習モデルのトレーニングプロセスを追跡し、分析するためのツールです。このツールは、モデルのパフォーマンスを視覚的に理解しやすくすることを目的としています。主に次のような特徴があります。

  1. 実験の追跡: モデルのトレーニング中に発生するさまざまなパラメータやメトリクス(例えば、損失率、精度など)をリアルタイムで追跡します。
  2. 視覚化: データの視覚化により、異なるモデルやハイパーパラメータが結果にどのように影響しているかを簡単に理解できます。
  3. 比較分析: 異なる実験やモデル間でのパフォーマンスを比較し、最適なモデルを選択するのに役立ちます。
  4. チームコラボレーション: チームメンバー間で実験結果を共有し、コラボレーションを促進します。
  5. 統合性: 人気のある機械学習フレームワークやライブラリ(例:TensorFlow、PyTorch)と簡単に統合でき、使用が容易です。

 機械学習の分野では、複数のモデルやパラメータを試すことが一般的ですが、そのプロセスは非常に複雑になることがあります。Weight & Biasを使用すると、この複雑なプロセスを管理し、効率的に分析することができるため、モデルの開発と改善がスムーズに進行します。

 アカウント作成などの工程が必要なところがネックですが、機械学習分野では非常によく使われるツールです。

キーワード:WandB(よく略されてこのように書かれる。ウォンディービーのような読み方)

おすすめの書籍・記事

TensorBoard

 TensorBoard(テンサーボード)は、機械学習におけるトレーニングプロセスの視覚化、理解、デバッグを支援するツールです。特に、TensorFlowという機械学習フレームワークで利用されます。しかし、PyTorchの結果の可視化も可能です。

 WandBと比べると、TensorBoardは「無料&オープンソース」という点が大きな違いです。総じて、TensorBoardはTensorFlowユーザーに特化したツールであり、WandBはより汎用的でチームベースの機能に重点を置いています。ユーザーのニーズやPJTの性質によって、どちらかまたは両方を選択することが可能です。

キーワード:TensorFlow、TensorBoard

おすすめの書籍・記事

MLFlow

 MLflow(エムエルフロー)は、機械学習のライフサイクルを管理し、機械学習プロジェクトの実行を容易にするオープンソースプラットフォームです。このツールは、機械学習プロジェクトのさまざまな側面を管理するために設計されています。主に以下の機能で構成されています。

  1. MLflow Tracking: 実験の追跡機能を提供し、モデルのトレーニングプロセス中に生成されるパラメータ、メトリクス、アーティファクト(例えば、モデルファイルやプロット)を記録します。これにより、モデルの開発と評価過程を追跡し、比較することができます。
  2. MLflow Projects: コードを再現可能な方法でパッケージ化し、他のデータサイエンティストと共有するためのフォーマットを提供します。これにより、異なる環境でのモデルの実行が容易になります。
  3. MLflow Models: 様々なMLフレームワークでトレーニングされたモデルを標準フォーマットで保存し、将来的に異なるプラットフォームで簡単にデプロイできるようにします。
  4. MLflow Registry: モデルのバージョニング、ステージング、プロダクションへのデプロイなどのライフサイクルを管理する機能です。これにより、モデルの開発から本番環境への移行がスムーズになります。

 MLflowの大きな利点は、その柔軟性と汎用性です。多様な機械学習ライブラリやフレームワークと互換性があり、異なる環境やプラットフォームでの使用に適しています。また、実験の追跡からモデルのデプロイまで、機械学習のライフサイクル全体をカバーしているため、チーム内でのコラボレーションを促進し、プロジェクトの管理を効率化します。これにより、データサイエンティストや機械学習エンジニアは、より迅速かつ効率的にモデルを開発し、プロダクション環境に導入することができます。

キーワード:MLFlow

おすすめの書籍・記事

4. LLM

ChatGPT API

 LLMが関係するPJTでは、ChatGPT APIを使う機会は非常に多いと思います。APIを叩くだけなため、コードの記述はそれほど難しくないですが、よく使うためしっかり理解しておきましょう!

 また、LangChainを使う機会も多いと思います。LangChain(ラングチェーン)は、自然言語処理(NLP)タスクを効率的に実行するためのオープンソースのPythonライブラリです。このライブラリは、チャットボットや他の言語理解アプリケーションの構築を容易にすることを目的としています。LangChainを使用することで、開発者は複雑なNLPアプリケーションをより簡単に構築し、カスタマイズすることができます。また、その拡張性と柔軟性により、特定のプロジェクトの要件に合わせて適切な機能を選択し、統合することが可能です。オープンソースコミュニティのサポートにより、新しい機能や改善が継続的に追加されていくため、進化し続けるNLPの分野において有効なツールとなっています。

キーワード:ChatGPT API、Azure OpenAI Service

おすすめの書籍・記事

  • OpenAIのGithub
    • こちらを読むのが非常におすすめ。特に11月のアップデートでOpenAIライブラリのバージョンが1.0.0〜が解禁され、1.0.0以降のAPIの呼び出し方がそれ以前のバージョンとは違うため、公式のREADMEを読んで抑えておくのがおすすめ。
  • QiitaのChatGPTタグの記事
    • 変化が激しいため、常に話題を追うのがおすすめ。
  • QiitaのLangChainタグの記事
    • LangChainに関しても最新のものを読むのがおすすめ。11月現在は、GPT-4VやRAGをテーマにした記事が多い印象。

プロンプトエンジニアリング

 プロンプトエンジニアリングは、LLMを用いたソリューション提供の場合、AIエンジニアが主に携わる部分かと思います。研究が盛んな分野でもあるため、日々のキャッチアップが重要になる分野です。

キーワード:Few-shot Learning、Chain-of-Thought、Step-by-Stepなど

おすすめの書籍・記事など