はい、マイクです!おはようございます!今日は2024年12月11日、火曜日ですね!さて、今日も楽しい「zenncast」をお届けしますよ!今日はZennでトレンドの記事をいくつか紹介していきますので、お楽しみに!
それでは、まずは今日の内容に入る前にお知らせです。前回紹介した記事についてですが、今回は特に触れることはありませんので、すぐに今日の内容紹介に進みますね。
さて、今日は5つの記事をお届けします!それでは、さっそく最初の記事からいきましょう!
1つ目の記事のタイトルは「全てのがくしゅうりつすけじゅーりんぐをかこにするOptimizer」です。新たに開発されたOptimizer「RAdamScheduleFree」についてのお話です。このOptimizerは、機械学習における学習率スケジューリングやwarmup設定を不要にし、安定かつ高速に収束する特性を持っています。Version 1.4から搭載されたこのOptimizerは、従来のAdamやAdamWよりも多くのケースで優れたパフォーマンスを発揮するそうです。
RAdamScheduleFreeは、Metaが提案した「ScheduleFree」という新パラダイムに基づいていて、これによりSGDやAdamWのスケジューリング版が実装されています。ユーザーは学習率スケジューリングに煩わされることなく、性能を向上させることができるんです。特に、初期の安定性を保ちながら学習率を調整する機能が組み込まれていて、実装方法もシンプルなので、開発者はタスク設計やデータ整備などの本質的な部分に集中できるとのこと。
RAdamScheduleFreeの導入により、開発者は複雑なハイパーパラメーターチューニングから解放され、効率的に機械学習モデルの開発を進めることができるようになるんですね。これにより、既存のOptimizerとSchedulerの組み合わせが持つトレードオフを克服し、より良い結果を得るための新たな選択肢が提供されるというのが期待されています。
。...。...
続いて、2つ目の記事です!タイトルは「enum と struct、どっちを選ぶべき?」です。この記事では、Swiftにおけるenumとstructの使い分けについて解説していますよ!Swiftのenumは、Associated Valueや強力なパターンマッチを活用できるため非常に便利ですが、特定の状況においてはstructの方が適している場合もあるんです。
具体的には、enumは状態遷移の明示や異なる型のAssociated Valueを持つ場合、選択肢が限定される場合に使用することが推奨されています。例えば、ボタンのサイズを表現するためにenumを使った場合、各サイズに関連するプロパティを持たせることができるんですが、コードが冗長になりがちです。一方、structを使用すると、各プロパティを直接持たせることができ、柔軟性が向上するんですね。
最終的に、コードの見通しや柔軟性、保守性を考慮すると、特定のケースではstructがより適していることが多いとされています。現場での経験から、無闇にenumを使っているケースも見受けられるので、適切な選択をすることが大切ですね。
。...。...
次は3つ目の記事です!タイトルは「Pythonちょっとデキルになるためのテクニック集」です!本記事では、Pythonの開発に役立つテクニックをいくつか紹介しています。特に、Pydanticを用いたImmutableなModelの作成や、Typing.Protocolを用いることでより良い開発体験が得られる点が挙げられています。
開発環境には、uvとTaskfileの組み合わせが推奨されていて、環境構築手法としては、virtual env、Docker、PyEnv + Poetry、uvなどがあり、著者は特にuvを推奨していますよ!また、開発者ツールとしては、ruff、black、mypy、pytest、coverageなどが紹介されていて、静的解析ツールの重要性も強調されています。これにより、実行前にエラーを検知し、コード品質を向上させることが可能になるんですね。
コーディングに関するテクニックとしては、Typing.Finalを用いて変数の上書きを防ぐ方法や、Typing.Protocolを活用したダックタイピングの処理方法が紹介されています。また、要約変数を用いることで条件式の視認性を向上させる手法や、Python 3.10から導入されたmatch文の使い方も説明されています。これらのテクニックを実践することで、より上級者に近づけるそうです!
。...。...
続いて、4つ目の記事です!タイトルは「「Agentless」という最新手法。LLMの新しい使い方。」です。ここでは、「生成AIエージェント」に代わる「Agentless」という新手法について解説しています。株式会社ナレッジセンスが提供するRAGシステムを背景に、ソフトウェア開発の自動化におけるAgentlessの概要がまとめられていますよ。
Agentlessは、特定用途に特化したLLM(大規模言語モデル)を利用する際に、AIエージェントを用いずに速度と性能を向上させるアプローチです。イリノイ大学アーバナ・シャンペーン校の研究者によって提案され、複雑なツールを用いるエージェント手法の問題点を克服することを目指しています。
この手法は、ユーザーからのソフトウェアに関する問題を以下の3つのステップで解決します。まずは「絞り込みフェーズ」で、レポジトリ内のファイルをツリー構造で表現し、LLMとembedding検索を組み合わせて関連ファイルを特定します。次に「修正フェーズ」で、特定した箇所について複数の修正パッチ候補を生成し、効率的に提示します。最後に「検証フェーズ」で、再現テストを自動生成し、既存の自動テストも実行して最適なパッチを選択します。
Agentlessの特徴は、LLMに次のアクションを決めさせないことです。これにより、簡単な問題には迅速に対処し、難しい問題にはその旨を伝えるAIを実現できます。実績としては、SWE-bench Liteベンチマークにおいて最高の修正成功率を達成し、低コストで運用できる可能性も高いとのことです。
。...。...
最後に、5つ目の記事です!タイトルは「UbieにおけるLLMを活用した不具合分析とテスト戦略立案プロセス」です!UbieのQAエンジニアackeyが、LLM(大規模言語モデル)を用いた不具合分析とテスト戦略の立案プロセスについて述べています。UbieはReact Nativeを利用したアプリ開発を行い、開発速度の維持・加速を目指していますが、フロントエンドのテストが不足している状況でした。
これを解決するために、LLMを導入し、不具合の迅速な分析を開始しました。LLMの選定にはAnthropicのClaudeを使用し、Jiraからエクスポートした不具合情報を分析。得られた結果から、フロントエンドにユニットテストとインテグレーションテストを導入することで、約58%の不具合を早期に防げる可能性が示されました。
分析結果を基に、アプリ開発チームと意見交換し、インテグレーションテストの拡充を進める方針を決定しました。LLMを利用することで客観的なデータに基づいた議論が可能になり、迅速な意思決定が実現したそうです。今後もQAエンジニアの採用を強化し、テスト戦略の拡充や改善サイクルの確立を進めていく方針とのことです。
さて、今日はここまで!今日の内容を駆け足でおさらいしましょう。まずは、RAdamScheduleFreeというOptimizerの紹介から、Swiftにおけるenumとstructの使い分け、そしてPythonの開発に役立つテクニック集、次に新手法「Agentless」の解説、最後にUbieでのLLMを活用した不具合分析とテスト戦略の立案プロセスについてお話ししました。
次回お会いできるのを楽しみにしています!詳しい内容はショーノートに書いてありますので、ぜひチェックしてみてくださいね!番組の感想もお待ちしています!それでは、素敵な一日をお過ごしください!