サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
掃除・片付け
tadaoyamaoka.hatenablog.com
PCで再生中の音声をリアルタイムで文字起こしできると、字幕機能がない動画の再生や、外国とのオンライン会議で便利である。 先日、OpenAIが公開したWhisperは、音声ファイルから文字起こしするするツールが提供されているが、リアルタイムで処理するツールは提供されていない。 そこで、Pythonスクリプトで、リアルタイムで文字起こしするツールを作成した。 ループバック録音 SoundCardを使うと、PCで再生されている音声を録音することができる。 pip install SoundCardでインストールする。 import soundcard as sc with sc.get_microphone(id=str(sc.default_speaker().name), include_loopback=True).recorder(samplerate=SAMPLE_RATE, chan
前回、Stable Diffusionをdanbooruデータセットを使用して追加学習することを試した。 今回は、自分でデータセットを作成して追加学習することを試す。 データセットには、画像とキャプションが揃っている必要があり、キャプションがない場合はCLIPで疑似ラベルを生成するなどする必要がある。 今回は、画像に対するキャプションがある「いらすとや」をスクレイピングして、データセットを作成した。 データセット作成 「いらすとや」から全ての画像とキャプションを取得した。 画像に複数バリエーションがある場合は、1つ目の画像のみを使用した。 キャプションは、日本語になっているため、Googleスレッドシートで、「=GOOGLETRANSLATE(XX,"ja","en")」を使って英語に変換を行った。 合計で、22891枚の画像とキャプションのセットが用意できた。 画像サイズ変換 画像は、5
5/3~5/5に開催された第33回世界コンピュータ将棋選手権に参加しました。 HEROZチームとして、「dlshogi with HEROZ」というプログラム名でエントリしました。 大会の概要 世界コンピュータ将棋選手権は、1990年より毎年開催されている歴史のあるコンピュータ将棋の大会です。 今回は33回目の開催で、46チームが参加しました。 第1予選、第2予選を通過した上位8チームで総当たりのリーグ戦で決勝戦が行われました。 大会の結果 決勝リーグでは最終戦で上位3チームが1敗で並び優勝を争う展開になりました。 dlshogiは最終戦で勝って、同じく最終戦で勝ったやねうら王とはSBの差で、優勝(二連覇)という結果になりました。 優勝につながったポイント 今大会では、二次予選の結果で、上位ほど強い相手に先手番であたることができるというルールでしたので、二次予選を1位で通過したことが有利に
拡散モデルで、将棋の方策を学習できないか試してみた。 拡散モデル 拡散モデルは、高品質で多様なサンプルを生成できる生成モデルである。 昨年8月にStable Diffusionが公開されたことで注目を集めている。 拡散モデルは、確率微分方程式によって表される確率分布を近似するモデルで、モード崩壊を起こさず多様な分布を学習できるという特徴がある。 また、プロンプトと呼ばれるテキストにより条件付けを行い、テキストに従った画像を生成できる。 将棋の方策 将棋の方策は、座標と移動方向の組み合わせで表現でき、dlshogiで採用している表現方法では2187次元になる。 つまり、指し手は、局面によって条件づけられた2187次元の確率分布からサンプリングを行っていることになる。 拡散モデルの可能性 条件付けを行い高次元の確率分布からサンプリングを行うという仕組みは、将棋の方策においても適用できると考える
「将棋AIで学ぶディープラーニング」という本を出版します。 昨年10月に技術書典3で「ディープラーニングを使った将棋AIの作り方」という技術系同人誌を出したことをきっかけに書籍化のお話をいただきました。 技術書典で出した本は、方策ネットワークを使った将棋AIの作り方でしたが、書籍の方では、将棋AIの作成を通してディープラーニングを学べるというコンセプトで執筆しています。 実際に動かせるコードを作ってみるというのが技術を学ぶために有効な方法だと思います。 私自身、AlphaGoのクローンと、ディープラーニングを使った将棋AIを作ったことでディープラーニングについて理解を深めることができたと思っています。 ディープラーニングを使って学習させた将棋AIを実際に動かしてみることで、ディープラーニングを体験して欲しいという想いで書きました。 内容は、3部構成で、 1部ではコンピュータ将棋の概要につい
前回の記事で、WhisperのモデルをONNXにして文字起こしができるようになったので、Windowsでスタンドアロンで実行できるアプリを作成した。 C#でWPFを使用して開発したので、実行できるのはWindowsのみである。 GitHubのReleaseからダウンロードできるようにした。 GitHub - TadaoYamaoka/RealtimeTranscribe: real-time transcription application 実行環境 .NET 6の.NET デスクトップ ランタイムが必要である。 実行方法 ReleaseからダウンロードしたRealtimeTranscribe.zipを解凍して、「RealtimeTranscribe.exe」をダブルクリックすると起動できる。 ラジオボタンで、「マイク」を選択すると音声をマイクから入力し、「ループバック」を選択するとPC
DeepMindからAlphaGo Zeroと同じ方法で、チェスと将棋でトップレベルを上回ったという論文が発表されました。 [1712.01815] Mastering Chess and Shogi by Self-Play with a General Reinforcement Learning Algorithm ドメイン知識を用いないスクラッチから強化学習のみで達成しています。 将棋やチェスはモンテカルロ木探索(MCTS)は向かず、Mini-Max探索の方が良いというのが常識のようになっていましたが、将棋やチェスでもディープラーニングと組み合わせることでMCTSが有効であることが示されたというのも大きな成果だと思います。 まだ全部読み切れていませんが、気になる個所から読んだ内容を書いていきます。 個人的に一番気になるのは、入力特徴と出力ラベルの表現方法です。 チェスについても書か
たややんさんが実施していた棋譜から棋力を推定する方法をdlshogiを使って検証してみた。 棋譜から棋力を推定する手法を検証しており、水匠の評価値をシグモイド関数で疑似的な勝率に変換した上で平均損失を計測する+計測する局面の勝率の閾値を設定するという手法で、24レーティングとの高い相関(相関係数-0.9536)を得られるようになりました。(続く) pic.twitter.com/wTu8pH6Ak7— たややん@水匠(将棋AI) (@tayayan_ts) 2021年9月17日 使用する棋譜 将棋倶楽部24の名人戦対局の2452棋譜を使用した。 対局者間のレーティングの分布は以下の通り。 対局者のレーティングのヒストグラムは以下の通り。 dlshogiの設定 棋譜の各局面について、バッチサイズ1で512プレイアウトで探索を行い評価値と最善手を取得する。 勝率の平均損失 まずは、各棋譜ごとに
その3の続き 自己対局パイプライン 自己対局パイプラインは、3つの主要な部分から構成される。 最適化 評価 自己対局 これらは並行で実行される。 最適化 ミニバッチサイズ:2,048 (32バッチずつ別々のGPUで実行) ミニバッチデータは直近50万の自己対局のすべての局面からランダムでサンプリング モーメントありのSGDで最適化(モメンタムパラメータ=0.9) 学習率は以下の通り徐々に下げる 1000ステップ 学習率 0-400 400-600 >600 損失関数には、policyの交差エントロピーとvalueの平均二乗誤差の和を使用 policyの交差エントロピーとvalueの平均二乗誤差は等しく重み付けする L2正則化を行う(c=) 損失関数を式にすると以下の通り zは勝敗(-1,1)、vはvalue、はモンテカルロ木探索で求めた局面の遷移確率、はpolicyの遷移確率、はネットワー
以前より不完全情報のボードゲームで強化学習のアルゴリズムを試したいと思ってる。 簡単すぎるゲームやマイナーなゲームでは、開発のモチベーションが続かない気がするので、日本で人気のある麻雀AIを開発したいと考えている。 麻雀は、「Lucky J」や「Suphx 」で強化学習が試されており、人間の高段者くらいの強さになっている。 それらのAIで使われている手法を自分で実装してみて理解したいと思っている。 また、MuZeroのようなモデルベースの手法を麻雀AIで試してみたいと思っている。 Pythonライブラリ まず、Pythonで使える麻雀ライブラリを探したが、点数計算用のライブラリが見つかったが、1局通して対局できるライブラリが見つからなかったので、自分で作ることにした。 Python以外の言語向けのオープンソースのライブラリでは、対局までできるものが見つかったので、参考にして実装した。 以下
作成している将棋アプリに定跡検索と戦型予想を実装した。 定跡ボタン(ノートのアイコン)を押すと、現在の局面の定跡の候補手と、各手を指した後にどの戦型になるかの確率を表示する。 候補手は、出現率と勝率も合わせて表示する。 定跡の元データ 定跡の元データには、floodateの2018年以降のR3500以上のソフト間の棋譜を使用した。 ある程度レーティングの高いソフトの指し手を登録した方がよいのでレーティングでフィルタを行ったが、R3300は技巧2の棋譜が多いためそれよりも少し大きいR3500とした。 なお、floodgateのレーティングの分布は以下のようになっている。 戦型予想 floodgateの棋譜から、定跡の各手を指した後に、どの戦型になったかの統計情報を取得して、それを確率として表示する。 戦型の分類には、Mizarさんが公開されているjsonの定義ファイルを使用させてもらった。
開発しているPythonの高速な将棋ライブラリcshogiに、ブラウザでUSIエンジン同士の対局が行える機能を追加した。 python -m cshogi.web.app --engine1 E:\game\shogi\gikou2_win\gikou.exe --engine2 E:\game\shogi\apery_wcsc28\bin\apery_wcsc28_bmi2.exe --byoyomi 1000 --port 8000のように実行して、ブラウザから「http://localhost:8000/」にアクセスして、USIエンジン同士の対局を観戦することができる。 これだけだと、将棋所のような便利なネイティブアプリがあるのでわざわざこの機能を使う必要はないが、Google Colab上で実行することができる。 Google Colabで実行 USIエンジン同士の対局 # csh
本日開催されたコンピュータ将棋の大会「電竜戦」で、チームdlshogiのGCTが決勝リーグで優勝しました! コンピュータ将棋の大会でディープラーニングを使用したソフトが優勝するのは初です。 2017年からdlshogiの開発を始めてやっと優勝までたどり着きました。 GCTについて 元々GCTは、加納さんがdlshogiを使用して開発したソフトです。 探索部分はdlshogiで、モデルの学習に使うデータをdlshogiとは別のもので行っています。 今大会では、私とチームで参加して、dlshogiの強化学習のデータや、学習方法、定跡作成方法など共有して、加納さんが主体でモデルの学習・定跡作成をしています。 今回の成果は、私のdlshogi単体では成し遂げたられなかったので、GCTが優勝してくれたことに感謝しています。 チームの経緯 加納さんとは将棋AI開発前からの知り合いで、以前から気楽に情報
Windows 10 Anniversary Updateが公開されたので、さっそくBash on Windowsを使ってみました。 といっても、今のところMinGW/MSYS2で間に合っているので特段利用したい用途はありませんが。 本当は、Bash on WindowsからGPUが使えたら、TensorFlowを使ってみたいのですが、今のところGPUには対応していないです。 インストール方法とか初期設定とかは検索すれば他の方々が書かれているので、ここではホームディレクトリの変更方法について書いておきます。 Bash on Windowsのホームディレクトリは、デフォルトでは、 C:\Users\USERNAME\AppData\Local\lxss\home\USERNAME になります。 How to Access Your Ubuntu Bash Files in Windows (
WhisperのモデルをONNXに変換する方法について記述する。 Whisperのモデル WhisperのモデルはPyTorchを使ってPythonで実装されている。 そのため、実行にはPyTorchをインストールしたPython環境が必要になる。 環境構築なしでスタンドアロンで利用できると用途が広がる。 また、アプリへの組み込みも行いやすくなる。 ONNXモデル ONNXは、ニューラルネットワークの標準ファイルフォーマットである。 モデルをONNXにすると、ONNX Runtimeなどの推論用のライブラリを使って推論できる。 推論用のライブラリは、組み込みで使うことを意図しているので、スタンドアロンのアプリに組み込むことができる。 ONNXへの変換 WhisperのモデルからONNXへの変換は、pytorch.onnxを使って行う。 ただし、Whisperは、デコーダのループ処理で、前の
個人メモ Hugging Faceで公開されているLlama2のモデルを使用して、4bit量子化を有効にして、70Bのモデルを1GPU(A100)で推論する方法について記述する。 dockerコンテナ作成 NVIDIAのPyTorchイメージを使用してDockerコンテナを作成する。 ※ホストのドライババージョンが古いため、少し前のイメージを使用している。 コマンド例 docker run --gpus all --network host -v /work:/work -w /work -it nvcr.io/nvidia/pytorch:22.12-py3 PyTorchバージョンアップ xformersがpytorch 2.0.1を要求するためPyTorchをアンインストールしてからインストール pip uninstall torch torchvision torchtext to
5/3~5/5に開催された第32回世界コンピュータ将棋選手権に参加しました。 HEROZチームとして、「dlshogi with HEROZ」というプログラム名でエントリしました。 大会の概要 世界コンピュータ将棋選手権は、1990年より毎年開催されている歴史のあるコンピュータ将棋の大会です。 今回は32回目の開催で、51チームが参加しました。 第1予選、第2予選を通過した上位8チームで総当たりのリーグ戦で決勝戦が行われました。 大会の結果 決勝では1回も負けることはなく、優勝という結果になりました。 第32回世界コンピュータ将棋選手権 決勝 ソフトの強さは毎年強くなっており、上位ソフトの強さは拮抗しており決勝に残るだけでも難しい状況でした。 優勝の可能性はあると考えていましたが、決勝に残るチームでの勝率の差は10%程度だと考えていたので、1回勝負では運で決まる要素も大きいと思っていました
python-shogiは、Pythonで扱える非常に役立つ将棋ライブラリですが、速度が遅いのが用途によっては欠点になります。 公式サイトにも記述されていますが、速度よりもシンプルに抽象的に扱えることが目的となっています。 しかし、機械学習の用途に使用しようとする速度の遅さがネックになります。 そこでPythonからもできるだけ高速に動作する将棋ライブラリを作成することにしました。 python-shogiの内部では、盤面はビットボードで表現されていますが、Pythonのビット演算は非常に遅くボトルネックとなっています。 ビット演算部分をC++で開発して、Pythonから呼び出せるようにすることで速度の改善が見込まれます。 C++で将棋ライブラリを一から作成するのもロマンがありますが、ほとんど既存のライブラリをまねるだけになるため、C++部分にAperyのソースコードを使用させてもらい、A
先日の日記でTF-IDFでFAQに回答することを試したが、TF-IDFでは質問文の類似度を単語の頻度に重み付けをして測っている。 そのため、単語が完全に一致している必要があり、同じ意味の単語でも異なる単語として認識してしまう。 word2vecを使用すると単語をベクトル化することができ、意味が近ければ近いベクトルを出力することができる。 word2vecを文に適用する場合、単語ベクトルの平均をとる方法もあるが、語順が失われるという欠点がある。 doc2vecを使用すると、文の語順を考慮して、文自体をベクトル化することができる。 doc2vecには、PV-DMとPV-DBOWの2種類があり、PV-DMとPV-DBOWのベクトルを組み合わせて使用することで精度を上げることができる。 PV-DMは、文と単語にユニークな固定次元のベクトルを割り当て、文の単語列をウィンドウサイズ幅ごとに抽出し、文の
先日の日記で、コンピュータ将棋とAlphaGoについて言及したが、次のPonanzaがディープラーニングに成功したということで、どのように適用しているのかが気になっている。 そこで適当に考察してみる。 電王戦のインタビューでもプロの棋譜との一致率について言及していたことから、学習しているのは評価関数ではなく方策(policy)であると思われる。 入力に盤面の情報を与えて、出力に指し手の確率を出力する関数である。 入力 ポイントとなるのが、入力の盤面の情報の与え方であると思う。 AlphaGoでは19×19の各座標の白石、黒石、空きで3チャンネル(2値)の情報と、アタリやシチョウなどの若干の囲碁の知識を特徴量として各チャンネルに割り当て、合計で48チャンネルのデータを入力としていた。 将棋では、駒の種類が多いため、成りを含めた14種類のコマ数分のチャンネルが必要になる。 また、持ち駒もあるた
前回に続いてAlphaGo Zeroの論文についてです。 ネットワーク構成 入力特徴 19×19の2値画像を17枚 8枚は現在のプレイヤーの石の座標を示す2値画像、8手分 8枚は相手のプレイヤーの石の座標を示す2値画像、8手分 1枚は現在のプレイヤーの石の色を示す全て0か1の画像 履歴を必要とするのは囲碁にはコウがあるため。 現在のプレイヤーの石の色が必要なのは囲碁にはコミがあるため。 以前(Fan Huiバージョン)のAlphaGoでは入力特徴に、呼吸点やシチョウなどの囲碁の知識を含む48の特徴を使用していましたが、石の座標情報のみになっています。 ニューラルネットワーク構成 入力層 1層の畳み込み層で以下の構成 畳み込み 3×3のフィルター、256 Batch Normalization 活性化関数 以前のAlphaGoは5×5のフィルター192でしたが、より数が増えています。 Bat
先日、dlshogiをPyTorch Lightningに対応させてマルチGPUで学習できるようにした。 これは、より大規模なモデルで将棋を学習するための布石でもある。 Transformerを使ったLLMで使われている技術を将棋に応用することを計画している。 「Deep Learning Shogi」(dlshogi)にちなんで、「Large Language Shogi」(llshogi)として開発していきたい。 ※モデルサイズは昨今のLLM並みに数兆パラメータとかにはできないので、LargeはLLMの技術を使うという意味で。 ベースラインの方針 まずベースラインとして、「Grandmaster-Level Chess Without Search」を参考にして、Transformerによる将棋の方策を実装したい。 トークン 以前に、将棋でTransformerモデル(Multi-He
今日のAlphaGo Zeroのニュースは衝撃でした。 将棋AIで方策勾配で強化学習を行ったときは、発散してうまくいかなかったので 教師データで最初に訓練が必要と思っていました。 それが、自己対局のみで強くできるとは驚きです。 論文が公開されたので、使われたテクニックを調べていきたいと思います。 Mastering the game of Go without human knowledge | Nature まだ全部読んでいませんが、ざっくり初めの方を読んで以下の特徴があるようです。 PolicyとValueを1つのネットワークで出力する Batch Normalisationと非線形の活性化関数を使用したResidual Network(ResNet) モンテカルロ木探索による自己対局で生成した各局面の打ち手と、勝敗結果を訓練データに使用する モンテカルロ木探索はノードを1回訪問したら
storyboardをローカライズするには、 Xcodeでプロジェクトを選択 Editor→Add Localization→Japanese(ja) 現在のstoryboardに基づいてMain.stringsが作成される storyboardを更新した場合は、 Xcodeでプロジェクトを選択して、 Editor→Export For Localizationでxliffファイルを作成して編集して Editor→Import Localizationsで読み込むとMain.stringsに反映される。 developer.apple.com コード内で使用する文字列をローカライズするには、 Xcodeでファイル新規作成→Resource→Strings File Localizable.stringsを作成 File inspectorからLocalize...ボタンをクリック Base
5/3~5/5に開催された第34回世界コンピュータ将棋選手権にHEROZチームとして、「dlshogi with HEROZ」というプログラム名で参加しました。 大会の概要 世界コンピュータ将棋選手権は、1990年より毎年開催されている歴史のあるコンピュータ将棋の大会です。 今回は34回目の開催で、45チームが参加しました。 第1予選、第2予選を通過した上位8チームで総当たりのリーグ戦で決勝戦が行われました。 大会の結果 決勝リーグでは最終戦で自力で勝てば優勝でしたが千日手になり、トップの「お前、 CSA 会員にならねーか?」(tanuki-チーム)と勝ち点同一でSB差で準優勝という結果になりました。 なお、二次予選は昨年とは異なり苦戦を強いられて、ボーダーラインで辞退があったため繰り上げで決勝に進めました。苦戦した事情は後述します。 今大会の特徴 定跡が出回った 先手勝率が高い角換わりの
先日の日記でYOLOv2による物体検出を試してみたが、YOLOと同じくディープラーニングで物体の領域検出を行うアルゴリズムとしてSSD(Single Shot MultiBox Detector)がある。 YOLOv2の方が精度が高いとYOLOv2の論文に書かれているが、SSDの精度も高いようなので試してみた。 オリジナルのSSDの実装は、Caffeが使用されているが、WindowsでビルドできるCaffeとバージョンが異なるものが使用されており、トライしてみたがビルドがうまくいかなかった。 Python系のフレームワークの実装がないか調べたところ、TensorFlowの実装が2つとKerasの実装が1つとChainerの実装が1つ見つかった。 TensorFlowの実装 ssd_tensorflow SSD-Tensorflow Kerasの実装 ssd_keras Chainerの実装
TensorFlowは公式でWindowsに対応しているが、C++のAPIはLinuxとMacでしかサポートされていない。 https://www.tensorflow.org/install/install_c dllをダウンロードして、defを作成してリンクする方法もあるようだが、CPUでしか使えない。 visual studioでtensorflow - Qiita WindowsでGPUを有効にしてC++からTensorFlowを使うには、自分でビルドする必要がある。 ビルドは以前の日記に書いたCMakeを使う方法でできる。 最新版に対応した手順は、ここを参照する。 https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/cmake/README.md 以下に手順を示す。 関連ツール・ライブラリ
先日、Ubuntu Serverを使うとCUDA+cuDNN+Chainerが動かせたという記事を書きましたが、以前にUbuntu DesktopでうまくNvidiaのドライバをインストールできなかった原因がわかりました。 Ubuntu Desktopでうまくインストールできなかった原因は、ドライバインストール前は、カーネルパラメータにnomodesetを付けて起動しないとコンソールモードにできないためでした。 CUDAのInstallation Guide for Linuxに記載がありました。 起動時にGRUBの設定で、カーネルパラメータにnomodesetを付与すれば、Desktopでもインストールできるようですが、Ubuntu ServerでNvidiaドライバとCUDAをインストールした後で、Desktopにした方が簡単です。 後から、Desktopにするには、 $ sudo a
先日、OpenAIが公開したオープンソースの音声認識ソフトウェアのWhisperを使って、会議議事録を自動作成する方法について記載する。 昨今、オンライン会議が主流になっているため、会議を録画/録音することが容易になっている。 Windows 10/11には、Xbox Game Barという機能が標準で備わっており、ZoomやGoogle Meets、Teamsなどでの会議が録画が可能である。 ループバック録音も可能で、再生している音声と、マイクからの音声をミックスして録音できる。 Xbox Game Barで録画した音声と、Whisperを組み合わせることで、無料で手軽に会議議事録を自動作成できる。 以下、手順について記載する。 事前準備 Xbox Game Barの設定 Windowsキー+Gで、Xbox Game Barを起動する。 歯車アイコンをクリックして、設定ウィンドウを開く。
次のページ
このページを最初にブックマークしてみませんか?
『TadaoYamaokaの開発日記』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く