TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

【論文】Voyager: An Open-Ended Embodied Agent with Large Language Models

LLM

GPT-4を使って、マインクラフトで初めてダイアモンドを獲得したLLMを利用したエージェントであるVoyagerの論文を読んだ際のメモ。 概要 LLM(GPT-4)を利用して、マインクラフトで「できるだけ多くの多様なものを発見し、できるだけ多くの多様なタスクを達成し…

PyTorchのFXグラフモードで量子化認識トレーニングを試す

ディープラーニングのモデルを推論する際、通常GPUが必要である。しかし、GPUがない場合でも、モデルのパラメータを浮動小数点から整数へと変換する手法を使うことで、CPUだけでも推論処理を高速に行うことが可能である。この手法を量子化と呼ぶ。 PyTorchの…

【LLM】guidanceを使ってみる

LLM

LLMをプロンプトやチェーンよりも効果的に制御することができるguidanceを試してみた。LangChainを使うと、複数のプロンプトを組み合わせて、前のプロンプトの回答を次のプロンプトに渡すような処理ができる。 そのような処理をするには、Pythonでプログラミ…

RTX4090とA100のNPSの比較

今年の世界コンピュータ将棋選手権で、dlshogiチームはA100x8のサーバを9台使用してMultiPonderによるクラスタ構成を採用していた。 9台使用していても、Ponderにヒットした1台しか実際の指し手には影響せず、多くのケースではMultiPonderなしの通常のPonder…

第33回世界コンピュータ将棋選手権 結果報告

5/3~5/5に開催された第33回世界コンピュータ将棋選手権に参加しました。HEROZチームとして、「dlshogi with HEROZ」というプログラム名でエントリしました。 大会の概要 世界コンピュータ将棋選手権は、1990年より毎年開催されている歴史のあるコンピュータ…

音声コーデックのLyraをPythonから使う

Lyraは、Googleが開発した低ビットレートでも高品質な音声コーデックである。Lyraよりも高性能なニューラルコーデックには、VALL-Eでも使用されているEncodecがあるが、商用利用は禁止されている。 Lyraは、Apache-2.0 ライセンスで、商用でも利用できる。Ly…

Bazel+pybind11でC++のコードからPythonモジュールを作る

個人メモBazel+pybind11でC++のコードからPythonモジュールを作る方法について記述する。 以下では、Ubuntu 22.04のDockerコンテナを使用している。 Bazelのインストール 公式の推奨に従って、Bazeliskを使用する。 npmのインストール Ubuntuのaptからインス…

ChatGPTで論文を3行に要約して感想を付けてSlack通知

何番煎じかわからないくらいのネタだが、Arxivの論文を3行に要約して、感想を付けてSlack通知する処理を実装した。先行事例に付加した要素としては、感想を付けたことくらいである。 ChatGPTに驚いてもらい、AIによる「驚き屋」を再現した。 先行事例 【Chat…

ChatGPTで作品のタイトルの略称を生成する

ChatGPTで作品のタイトルの略称を生成できるか試してみた。 「俺の妹がこんなにかわいいわけがない」を「俺妹」と略したりするあれである。GPT4で試していたが、利用制限に引っ掛かってしばらく使えなくなったので、以下は3.5で試した結果である。 単純に略…

ChatGPTでHacker Newsから人工知能に関連する人気記事を抽出する

人工知能に関するニュースは、最初に英語で発信されることが多い。 Hacker Newsは、人工知能を含む計算機科学に関するニュース記事を投稿するサイトとして英語圏で人気がある。Hacker Newsはタイトルのみが並んだシンプルな見た目で、どれが人工知能に関連す…

ControlNetを「いらすとや」で学習する

先日試したControlNetの学習を「いらすとや」のデータセットで学習させてみた。 データセット 以前にStable Diffusionの追加学習を試したときに収集したいらすとやの22891枚の画像を使用した。 いらすとやの画像説明文に加えて、wd-v1-4-vit-taggerを使用し…

ControlNetの学習を試す

ControlNetは、Stable Diffusionの出力を、スケッチや深度、ポーズなどで制御する手法で、従来のテキストによる条件付けやImage2Imageでは難しかった制御が可能になる。ControlNetを独自のデータセットで学習をしたいと考えており、まずは公式で用意されてい…

PaintsChainerをPyTorchで学習 その2

前回、PaintsChainerをPyTorchにポーティングして着色モデルの学習を行った。 その際、danbooru2017の512x512の画像をすべて使用したが、四コマ漫画のようなイラスト以外の画像も含んでいたため、学習の妨げになっていた可能性があるため、今回は、画像をフ…

PaintsChainerをPyTorchで学習

Stable Diffusionが公開されてから、拡散モデルで自動着色したいと思っていて、自動着色についていろいろ調べていた。最近、Style2Paints V5 Previewが発表されて、拡散モデルによる自動着色で高いクオリティの自動着色が実現できることが示された。 Control…

【Bing】Bingチャットにマインドマップを作らせる

小ネタです。 前回、ChatGPTにマインドマップを作らせてみたが、Bingチャットでも試してみた。プロンプト:「AIの技術」に関するマインドマップを作って回答: ちゃんとツリーになって返ってきた。 前回ChatGPTで試した時は、箇条書きだったので、こっちの方…

【ChatGPT】ChatGPTにマインドマップを作らせる

ChatGPTでマインドマップを作れるか試してみた。プロンプト:「AIビジネスに関してマインドマップを作って」 回答: はい、AIビジネスに関連するマインドマップを作成することができます。以下が一例です: I. AI技術とその概要 A. 機械学習 B. 自然言語処理…

Whisperモデルの軽量化

ONNXにしたWhisperのモデルの推論を速くするために、以下の方法を試した。 OpenVINOで推論 FP16化 INT8量子化 Whisperのモデルはbaseを使用している。 OpenVINOで推論 OpenVINOは、intelのCPUに最適化した推論エンジンである。 ONNX Runtimeの代わりに、Open…

pocketfftを使ってみる

FFT

先日、Whisperで音声認識する処理を実装した際に、FFTの処理でフレームサイズが2のべき乗でない場合にどうやって処理するか戸惑った。Whisperではフレームサイズが400となっており、NAudioのFFTでは、フレームサイズが2のべき乗という制約があり使用できなか…

Whisperでリアルタイムに文字起こしするアプリ

前回の記事で、WhisperのモデルをONNXにして文字起こしができるようになったので、Windowsでスタンドアロンで実行できるアプリを作成した。C#でWPFを使用して開発したので、実行できるのはWindowsのみである。GitHubのReleaseからダウンロードできるようにし…

WhisperのモデルをONNXにする その2

前回、WhisperのモデルをONNXにする方法について記述した。Whisperのモデルは、単体では音声認識はできず、音声をメルスペクトログラムにする前処理と、トークンをデコードして文字列にする後処理が必要になる。 今回は、前処理と後処理をC#で実装する方法に…

WhisperのモデルをONNXにする

WhisperのモデルをONNXに変換する方法について記述する。 Whisperのモデル WhisperのモデルはPyTorchを使ってPythonで実装されている。 そのため、実行にはPyTorchをインストールしたPython環境が必要になる。 環境構築なしでスタンドアロンで利用できると用…

続:どの駒が評価値に寄与しているかを可視化する

先日記事にした駒の働きを可視化するツール(feature_importance.py)に、SVGを出力する機能を追加した。前回は数値で出力して、Excelの条件付き書式のカラースケールで、色に変換してから、ShogiGUIに画像として重ね合わせるということを行っていたが、手間が…

floodgateで任意のソフト同士で対局する方法

floodgateは、30分置きに自動で対局が始まるコンピュータ将棋の対局サイトだが、任意のタイミングで2つのソフトを対局させることができる。 CSAサーバプロトコル CSAサーバプロトコルでは、%%GAMEでgamenameを指定することで、対局条件が同じソフト同士の対…

【論文】Adversarial Policies Beat Superhuman Go AIs

[2211.00241] Adversarial Policies Beat Superhuman Go AIs最先端のコンピュータ囲碁ソフトのKataGoの脆弱性を攻撃することで、高い勝率を上げるエージェントを訓練する方法について書かれた論文。囲碁のルールの設定が公平でないとRedditで批判されている…

棋力計測の戦型分類

floodgateの戦型分類の記事にコメントをいただいたので、棋力測定時の戦型について分類してみた。 棋力測定の方法 dlshogiの棋力測定は、平手開始局面から序盤ランダムありで測定を行っている。 また、基準ソフトとして水匠5を互角になる条件に調整して、リ…

水匠の定跡作成プログラム

第3回電竜戦の水匠の定跡作成プログラムと同様のプログラムを作成した。 DeepLearningShogi/make_book_minmax.py at master · TadaoYamaoka/DeepLearningShogi · GitHub 方式 水匠の定跡作成プログラムと同様に、末端局面(一定の対局数以上の局面)の勝率をMi…

中盤互角局面集

先日、dlshogiと水匠が互角になる探索ノード数を調べたが、初手開始局面からdlshogiはランダムありで測定していた。 初手開始局面からだと、dlshogiは序盤で優勢を築いてそのまま勝つ場合が多いため、中終盤の精度が測定できていない可能性がある。 そこで、…

将棋AI実験ノート:dlshogiと水匠で評価値の割れる局面の精度改善

第3回世界将棋AI電竜戦では、先手の角換わり定跡で、dlshogiが後手番で後手優勢と評価している局面から、定跡を抜けてから反省して負けることがあった。 dlshogiと水匠で評価が分かれる場合、dlshogiが正しくてそのまま勝ち切ることも多いが、特に中盤以降で…

拡散モデルの実装を理解できるノートブック

拡散モデルの実装を理解するために、こちらのノートブックがとても分かりやすかったので紹介する。 diffusion-models-class/unit1 at main · huggingface/diffusion-models-class · GitHub拡散モデル(DDPM)を、以下のように段階的に実装して確認できるように…

floodgateの戦型別先手勝率の変化

先日の第3回世界将棋AI電竜戦では、水匠の先手角換わり定跡の勝率の高さが注目された。 そこで、最近の将棋AI同士の対局で、戦型別の勝率に変化があるか調査した。以下の調査では、戦型の分類にMizarさんが公開されているjsonの定義ファイルを使用している。…