-
Notifications
You must be signed in to change notification settings - Fork 12
参考記事キュレーション【技術系】
モデリングとは、現実世界のシステムやプロセスを数学的・統計的なモデルを使って表現するプロセスです。モデリングの目的は、現実世界の現象を理解・予測・最適化することにあります。AIエンジニアは、主に以下の2つのモデリングを業務で扱います。
-
統計的モデリング
┗ データを分析し、トレンドやパターンを見つけ出す
-
機械学習モデリング
┗ データから学習し、予測や分類を行うモデルを構築する
分析とは、データや情報を調べ、検討し、解釈するプロセスです。これにより、データの意味や背景にあるパターン、関連性、トレンドなどを理解することができます。分析は、意思決定や戦略立案において重要な役割を果たします。
まとめると、モデリングと分析は互いに補完し合う関係にあり、モデリングは現象を表現するフレームワークを提供し、分析はそのモデルを用いてデータを理解→洞察を得るためのプロセスです。これらの技術は、ビジネスの意思決定、科学的研究、技術開発など多岐にわたる分野で活用されています。
おすすめの書籍・記事
- 分析モデル入門|ソシム
- データサイエンスVtuverアイシア(の中の人)がまとめた、分析モデルに関する本。プログラムコードはないが、ML・DSの知識を網羅的に把握するのに最適。
- 深層学習(機械学習プロフェッショナルシリーズ)|講談社
- 深層学習の理論について、基礎的〜応用的な内容を幅広く学べる。コードがない&数式が多いため人は選ぶが、良書。
- ディープラーニングを支える技術|技術評論社
- Python機械学習プログラミング[PyTorch&scikit-learn編]|インプレス
- scikit-learnを使ったモデリング、クロスバリデーション、PyTorch、GANなど、機械学習に関して広く深く学べる書籍。かなり分厚い。
- 最短コースでわかる PyTorch &深層学習プログラミング
- PyTorchに関してコードを動かしながら学べる。また、数学的な話を直感的な説明に置き換えているため、読みやすい。
- その他おすすめ:Kaggle、SIGNATEなどのコンペに出場
- コンペは実際に企業が直面するような内容を解くケースが多く、勉強になる
AIエンジニアでの業務では、技術選定のタイミングで、論文のサーベイ→検証が必要になる場面も多いです。また、有益な論文であるがコードがない場合は、自身でその論文の内容を再現実装するケースもあるかと思います。再現実装は高いコーディング能力と、論文への理解力(数学力・英語力)が求められます。
おすすめの書籍・記事など
- Papers with Code
- 論文・データセット・コードがまとまっており、すぐに試せるものを探す場合に便利。ただし、コードが簡単には動かせない場合もある。
- ChatPDF・Assistants API
- PDFを読み込ませて、そのPDFの内容をチャットで聞くことで、理解を深められる。
AIエンジニアの分析などの業務では、Pythonコードを書くことがほとんどだと思います。松尾研の講義などでPythonを触ったことがある方も多いかとは思いますが、このタイミングで今一度、環境構築について押さえておくことをお勧めします。
また、プロジェクトごとに環境構築で使うツールが異なってくる場合もあります。その場合は、PMの指示に従って環境構築を行いましょう。
キーワード:pip、Poetry、Docker、Anaconda、PyCharm、rye
おすすめの書籍・記事など
- Python環境構築ガイド|Python公式
- 公式による、Pythonの環境構築解説。
- Pythonの開発環境の3つの観点をおさえよう|Zenn
- あらゆるツールを用いたPythonの環境構築について、わかりやすくまとまっている。
- [python] pip/VSCode開発環境の構築 (windows11)|Qiita
- pipによる環境構築がまとまっている。
- 研究のためのPython開発環境|Zenn
- 無料で読める。執筆中とのことだが、VScodeの拡張機能のTipsや、Poetryの使い方など、網羅的に書かれている。
環境変数を用いてコードを記述すると、柔軟にコードを設計できたり、見える場所に書きたくないコードを隠すことができます。後者は、OpenAIのAPIキーなどがわかりやすい例です。
環境変数の扱いについてもプロジェクトによって異なると思いますが、Pythonのosライブラリや、python-dotenvライブラリを使う場合が多いです。
キーワード:
- Pythonライブラリ → python-dotenv、os
- その他 → .env、exportコマンド(linux)
おすすめの書籍・記事など
- Pythonで環境変数を設定する方法(os.environ)|WagtailBase
- osライブラリを使った、一般的な環境変数の設定・読み込み方法がまとめられている
- python-dotenvを使って環境変数を設定する|Qiita
- python-dotenvと.envファイルを使って環境変数を管理する方法がまとめられている。
プロジェクトメンバー間や、先方エンジニアとコードを共有する上で、コードの記述アプローチに違いがある場合、コードの可読性の低下・コードレビューの時間倍増など、プロジェクトに悪影響をもたらすことがあります。
そのような場合に、フォーマッタやリンタを用いることで、コードの品質向上、開発プロセス効率化が可能になります。フォーマッタがコードの書式を整え、リンタがコードの問題検出の役割をはたします。開発を円滑に進めるためにも、これらの基本的な知識は押さえておきましょう。
キーワード
- フォーマッタ → Black、AutoPEP8、YAPF
- リンタ → Pylint、Flake8、Mypy
おすすめの書籍・記事など
- Pythonのコードフォーマッターについての個人的ベストプラクティス|Qiita
- フォーマッタとリンタについて、非常に詳細にまとまっている記事。
- Pythonのフォーマッターとリンターについての備忘録|Zenn
- こちらもまとまっているが、設定方法など、実践的な内容になっている。
AIエンジニアの業務で Pythonを書く場合、主にVScode、またはGoogle Colabratory上で書くことが多いですが、そのほかにも、Amazon SageMakerや、Jupyter Notebook・Jupyter Lab、EmacsやVimなどが使われることもあるかと思います。プロジェクトでPMからの指示がある場合はそれを使うべきですが、エディタやIDEも奥が深いので、ご自身に合ったものを探してみてください。
おすすめの書籍・記事など
- Pythonで環境変数を設定する方法(os.environ)|WagtailBase
- osライブラリを使った、一般的な環境変数の設定・読み込み方法がまとめられている
- python-dotenvを使って環境変数を設定する|Qiita
- python-dotenvと.envファイルを使って環境変数を管理する方法がまとめられている。
Gitは、ソフトウェアの開発で使用される「バージョン管理システム」の一つです。プログラミングのプロジェクトにおいて、複数の開発者が同時に作業する場合、各開発者のコードの変更点を管理し、必要に応じて以前のバージョンに戻すことができます。Gitは、各開発者がプロジェクトのコピーを自分のコンピューターに持っており、変更を加えた後にそれを共有する「分散型」のシステムです。これにより、インターネット接続がなくても作業を続けることができ、後で変更を統合することが可能です。
GitHubは、Gitのバージョン管理システムを使って、プロジェクトをインターネット上で管理するためのプラットフォームです。GitHubを使うことで、開発者は自分たちのプロジェクトをオンラインで保存し、変更履歴を追跡し、他の開発者と協力することができます。GitHubは、プロジェクトに関する「リポジトリ」と呼ばれるストレージスペースを提供し、そこにコードや文書、その他のファイルを置くことができます。開発者は、リポジトリを「フォーク」して自分のバージョンを作り、その後、オリジナルのプロジェクトに「プルリクエスト」を送って変更を提案できます。
Git/Githubを使った開発は盛んに行われるため、基本を押さえましょう!
キーワード:マージ(merge)、ブランチ(branch)、コミット(commit)、push、pull
おすすめの書籍・記事
- Progate
- 日本語の優しい文章で、短時間(1hほど)でGitについて学べる
- Github公式が出している学習教材
- 公式が出している教材でGitを学びたい方向け。英語で書かれているが、かなりわかりやすくまとまっている。
- ミクシィ
- 450ページに渡るスライド数で、Gitの基礎を一通り学べる。わかりやすい。
- ブレインパッド
- 短めの資料で、チュートリアルなどを通して学べる
Dockerは、アプリケーションをパッケージ化し、他の環境でも同じように動作させることを目的とした技術です。この技術は「コンテナ」と呼ばれる軽量な仮想化技術を使用しています。Dockerを使うことで、アプリケーションが動くために必要な環境(例えば、特定のソフトウェアやライブラリ)を一緒にパッケージ化し、異なるコンピューターシステム上でもそのアプリケーションを簡単に、そして一貫性をもって動かすことができます。伝統的な仮想化技術と比較して、Dockerのコンテナは非常に軽量で、起動が速く、リソース(CPUやメモリなど)の消費が少ないという特長があります。これは、DockerがホストOSのカーネルを共有し、各コンテナが必要なアプリケーションとその依存関係のみを含んでいるためです。
開発者にとっては、Dockerを使用することで、自分のローカル開発環境と本番環境の間で「動かない問題」を軽減できます。また、複数のプロジェクトを同時に扱う際にも、それぞれのプロジェクトに必要な環境を容易に切り替えることができます。Dockerは、コマンドラインツールとして提供されており、Dockerfileという設定ファイルを使用してコンテナの設定を行います。このDockerfileには、アプリケーションの実行に必要な指示(使用するベースイメージ、実行するコマンド、コピーするファイルなど)が記載されています。Dockerのコンセプトはシンプルですが、実際の運用ではネットワーキングやデータの永続化、セキュリティなど、考慮すべき点が多くあります。しかし、その柔軟性と移植性は多くの開発者やシステム管理者にとって非常に魅力的なものです。
本格的に開発をするPJTではよく用いられる技術なので、基本を押さえましょう!
キーワード:コンテナ・ビルド・Dockerfile・Docker Compose
おすすめの書籍・記事
- 企業が公開している研修・レッスン
- ミクシィ:コンテナ研修(コンテナ基礎編)【ミクシィ22新卒技術研修】*
- Dockerの基本について、見やすいスライドを通して学べる
- さくらインターネット:Docker入門(第一回)~Dockerとは何か、何が良いのか~
- Dockerの基本操作に加え、Dockerfile、Docker-Composeについて短時間で学べる。全6回。
- 記事
- Docker Getting Started Tutorial| Github
- 公式のチュートリアル。実際にDockerを使ってコンテナを立てることで、チュートリアルが見れるようになっている。
- Docker超入門①〜Dockerってなに?〜【初心者向け】|datawokagaku
- ①〜⑦まであり、Dockerの基礎から、役立つコマンドなど、幅広く学習できる
- 【連載】世界一わかりみが深いコンテナ & Docker入門 〜 その1:コンテナってなに? 〜
- 全7回。Dockerの基本に加え、第5回、第6回ではネットワークの仕組みについても学べる
- 動画
- Dockerの基本について、VTuberの動画でラフに学べる
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)
おすすめの書籍・記事
- Azureの公式ドキュメント
- Azureのサービスについて個別に勉強したい場合は、Azureの公式ドキュメントがわかりやすいためおすすめ。
- azure-search-openai-demo|Github
- Azure OpenAI Serviceを用いたRAGの構築が可能なレポジトリ。かなりアップデートの頻度が高く、Reactを使った本格的なUIもセットになっている。READMEの解説もわかりやすいため、Azureの入門にも適切。
- Azure OpenAI Service の機能を詳しく解説|ソフトバンク
- Azure OpenAI Serviceの概要について短時間で読めて学べる内容になっている
AWS(Amazon Web Services)は、アマゾンが提供するクラウドコンピューティングプラットフォームです。このプラットフォームは、様々なサービスを提供しており、インターネットを通じて利用できます。AWSの利点は、物理的なサーバーやデータセンターを所有する必要がなく、必要に応じてリソースを追加・削除できる柔軟性とコスト効率の高さにあります。
AWS、Azure、GCPの中では、企業で一番使われているサービスかと思いますが、OpenAI系のサービスと相性が悪いため、近年の機械学習系のサービス提供においてはAzureの方が優勢かと思います。しかし、ChatGPTに性能で迫る「Claude」というAmazonが開発したモデルを使えるなど、AWSを使用する機会も十分に考えられます。
キーワード:AWS Bedrock、Amazon SageMaker、Amazon Rekognition、Amazon Lexm、Claude
おすすめの書籍・記事
- Amazon Bedrock での Anthropic Claude
- Amazon Bedrock
- AWSに関しても、公式のドキュメントがわかりやすい&豊富に展開されているため、基本的には公式のドキュメントを追っていく形で学習できる。
GCP(Google Cloud Platform)は、Googleが提供するクラウドコンピューティングのサービス群です。GCPは、サーバー、ストレージ、データベース、ネットワーキング、ビッグデータ処理、機械学習など、多岐にわたるクラウドサービスを提供しています。物理的なインフラストラクチャの管理をGoogleに委ねることで、開発者はアプリケーションの開発やデータの分析に集中できます。
GCPを使用することで、機械学習プロジェクトの開発サイクルを加速し、コストを削減しながら、スケーラブルで安定したインフラストラクチャ上で機械学習モデルを運用することができます。また、Googleの先進的な機械学習技術を活用することが可能です。
しかし、LLM系のサービスを構築するとなるとChatGPTを使えるAzureや、Claudeを使えるAWSの方が優勢である印象です。
キーワード:Google AI Platform、AutoML、BigQuery ML、Dialogflow
おすすめの書籍・記事
- GCPの公式ドキュメント
- AI と機械学習のプロダクト
- AWSに関しても、公式のドキュメントがわかりやすい&豊富に展開されているため、基本的には公式のドキュメントを追っていく形で学習できる。
- GCP AI / 機械学習関連プロダクト 9 個まとめ|Cloud Ace
- GCPのML系サービスについて、概要・メリット・ユースケースなどを交えて解説されている。
- 【2020年】GCPのAI/ML系のサービスまとめてみた|Developers IO
- 少し昔の記事だがGCPで使用できるML系サービスがまとめられている。
Weight & Bias(ウェイト・アンド・バイアス)は、機械学習モデルのトレーニングプロセスを追跡し、分析するためのツールです。このツールは、モデルのパフォーマンスを視覚的に理解しやすくすることを目的としています。主に次のような特徴があります。
- 実験の追跡: モデルのトレーニング中に発生するさまざまなパラメータやメトリクス(例えば、損失率、精度など)をリアルタイムで追跡します。
- 視覚化: データの視覚化により、異なるモデルやハイパーパラメータが結果にどのように影響しているかを簡単に理解できます。
- 比較分析: 異なる実験やモデル間でのパフォーマンスを比較し、最適なモデルを選択するのに役立ちます。
- チームコラボレーション: チームメンバー間で実験結果を共有し、コラボレーションを促進します。
- 統合性: 人気のある機械学習フレームワークやライブラリ(例:TensorFlow、PyTorch)と簡単に統合でき、使用が容易です。
機械学習の分野では、複数のモデルやパラメータを試すことが一般的ですが、そのプロセスは非常に複雑になることがあります。Weight & Biasを使用すると、この複雑なプロセスを管理し、効率的に分析することができるため、モデルの開発と改善がスムーズに進行します。
アカウント作成などの工程が必要なところがネックですが、機械学習分野では非常によく使われるツールです。
キーワード:WandB(よく略されてこのように書かれる。ウォンディービーのような読み方)
おすすめの書籍・記事
- Weight & Biases Documentation
- 公式ドキュメント。Quick Startで基本を抑えられる。
- 5行でカッコいい可視化を「WandB」入門|Qiita
- WandBの必要最低限の知識を最短で学べる。
- WandBデモ "LLM開発・LLMベースのアプリケーション開発支えるW&B"
- 公式が提供するYoutubeの解説動画で学べる。
TensorBoard(テンサーボード)は、機械学習におけるトレーニングプロセスの視覚化、理解、デバッグを支援するツールです。特に、TensorFlowという機械学習フレームワークで利用されます。しかし、PyTorchの結果の可視化も可能です。
WandBと比べると、TensorBoardは「無料&オープンソース」という点が大きな違いです。総じて、TensorBoardはTensorFlowユーザーに特化したツールであり、WandBはより汎用的でチームベースの機能に重点を置いています。ユーザーのニーズやPJTの性質によって、どちらかまたは両方を選択することが可能です。
キーワード:TensorFlow、TensorBoard
おすすめの書籍・記事
- TensorBoardを使う|TensorFlow
- 公式による解説。画像・テキスト・ノートブックでの使い方など、かなり豊富に書かれている。
- Tensorboardの使い方まとめ|Qiita
- 日本語の記事で、TensorBoardについて広く学べる。
- PyTorchのTensorBoardサポートを試してみる|Qiita
- PyTorchでTensorBoardを使う方法についてわかりやすく書かれている。
MLflow(エムエルフロー)は、機械学習のライフサイクルを管理し、機械学習プロジェクトの実行を容易にするオープンソースプラットフォームです。このツールは、機械学習プロジェクトのさまざまな側面を管理するために設計されています。主に以下の機能で構成されています。
- MLflow Tracking: 実験の追跡機能を提供し、モデルのトレーニングプロセス中に生成されるパラメータ、メトリクス、アーティファクト(例えば、モデルファイルやプロット)を記録します。これにより、モデルの開発と評価過程を追跡し、比較することができます。
- MLflow Projects: コードを再現可能な方法でパッケージ化し、他のデータサイエンティストと共有するためのフォーマットを提供します。これにより、異なる環境でのモデルの実行が容易になります。
- MLflow Models: 様々なMLフレームワークでトレーニングされたモデルを標準フォーマットで保存し、将来的に異なるプラットフォームで簡単にデプロイできるようにします。
- MLflow Registry: モデルのバージョニング、ステージング、プロダクションへのデプロイなどのライフサイクルを管理する機能です。これにより、モデルの開発から本番環境への移行がスムーズになります。
MLflowの大きな利点は、その柔軟性と汎用性です。多様な機械学習ライブラリやフレームワークと互換性があり、異なる環境やプラットフォームでの使用に適しています。また、実験の追跡からモデルのデプロイまで、機械学習のライフサイクル全体をカバーしているため、チーム内でのコラボレーションを促進し、プロジェクトの管理を効率化します。これにより、データサイエンティストや機械学習エンジニアは、より迅速かつ効率的にモデルを開発し、プロダクション環境に導入することができます。
キーワード:MLFlow
おすすめの書籍・記事
- MLflow: A Tool for Managing the Machine Learning Lifecycle|MLFlow
- MLflowの公式ページ。ここから辿れる記事を読めば間違いない。最初はQuick Startをやるのがおすすめ。
- 【MLOps】「いつか使いたい!」と思っていた人のためのMLflowまとめ|Qiita
- MLflowについて知らない人が、最短で結果の可視化まで学べる。
- MLflowとは何か|Qiita
- データブリックスの方が書いた記事。画像を豊富に使っていて、わかりやすい。
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など
おすすめの書籍・記事など
- Learn Prompting: Your Guide to Communicating with AI
- かなりの文量があるが、プロンプトエンジニアリングについて広く深く抑えられる。
- Prompt Engineering Guide
- DAIR.AIのプロジェクト。かなり読みやすい
- ChatGPT Prompt Engineering for Developers
- DeepLearning.AIのコース。Andrew Ngさんが出ている
- Best practices for prompt engineering with OpenAI API
- OpenAIによる記事。読みやすい