PyTorchの自動微分を使った1次元のイジング模型の分配関数の計算

1 次元のイジング模型 周期的境界条件のもとで 1 次元のイジング模型のハミルトニアンは $$ H\left(\sigma_{1}, \cdots, \sigma_{N} \right) = -J \sum_{i} \sigma_{i} \sigma_{i+1} - h \sum_{i} \sigma_{i} $$ である。 ここで、$\sigma_{i}=\pm 1$はスピンを表し、周期的境界条件から$\sigma_{1} = \sigma_{N+1}$が成り立つ。 また$h$は外部磁場を表し、$J$は隣り合うスピンの相互作用を表す。 このハミルトニアン$H$から分配関数$Z$は $$ Z = \sum_{\sigma_{1}, \cdots, \sigma_{N} = \pm 1} e^{- \beta H \left(\sigma_{1}, \cdots, \sigma_{N} \right)} $$ と計算出来る。 ここで、$\beta = \frac{1}{k_B T}$は逆温度である。 この分配関数は次のように書き換えることが出来る。 $$ Z = \sum_{\sigma_{1}, \cdots, \sigma_{N}} \exp{\left( \sum_i \beta J \sigma_i \sigma_{i+1} + \frac{\beta h}{2} (\sigma_i + \sigma_{i+1}) \right)} = \mathrm{tr} \left( T^N \right) $$...

June 3, 2022 · 3 min · 434 words · derbuihan

充足可能性問題の相転移の実験

充足可能性問題 (satisfiability problem, SAT) 「与えられた論理式を真にする真偽値$x_1, x_2 \dots$が存在するか?」という問題を充足可能性問題という。 この問題の最も一般的な形は、NP 完全であることが知られている。 例: $(x_1 \lor x_2) \land (x_1 \lor \bar{x_2}) \land (\bar{x_1} \lor \bar{x_2})$ 解: $x_1=\text{True}$, $x_2=\text{False}$ この例のように$\bigwedge_i \bigvee_j x_{i,j}$で表される論理式を連言標準形といい、その各項の変数の数が 2 以下であるとき 2-SAT と呼ばれる。 2-SAT は多項式時間で解けるアルゴリズムが存在する。 一方で項の変数の数が 3 以下の 3-SAT は NP 完全であることが知られている。 問題の生成 3-SAT 問題は DIMACS CNF で記述される。 c example DIMACS-CNF 3-SAT p cnf 3 5 -1 -2 -3 0 1 -2 3 0 1 2 -3 0 1 -2 -3 0 -1 2 3 0 行頭がcの行はコメントである。 行頭がpの行には変数が 3 つで項数が 5 項である。 また、 -1 -2 -3 0は$\bar{x_1} \lor \bar{x_2} \lor \bar{x_3}$を示している。...

May 23, 2022 · 3 min · 503 words · derbuihan

PyTorchを用いて三角ゲームを解いてみた。

先日、三角ゲームというゲームを知った。 今回はこのゲームを Pytorch を用いて解いてみた。 三角ゲームの説明 はじめに三角ゲームについて説明する。 例として$n=5$人($A, B, C, D, E$)で遊ぶ場合を説明する。 ゲームを始める前にそれぞれのプレイヤーは、自分以外の異なる2人のプレイヤーを選択する。 ここでは、$A = (B, C)$, $B = (A, C)$, $C = (B, D)$, $D = (C, E)$, $E = (C, D)$を選んだとする。 それぞれのプレイヤーは選択したプレイヤーと正三角形を作るように移動を行う。 最終的にこの条件をなるべく満たしながら最も多くの正三角形を作成することがこのゲームの目標である。 この例では以下のようにそれぞれのプレイヤーが移動すれば、すべての条件を満たし最大の 5 個の正三角形が作成出来る。 PyTorch を使って解く このゲームを PyTorch を用いて解いてみる。 ライブラリのインポート はじめに、準備としてライブラリのインポートと保存用の関数を用意。 import torch from torch import norm, dot, abs from random import randrange, random import matplotlib.pyplot as plt def savefig(xs, ys, i): plt.figure(figsize=(8,8)) plt.xlim([-0.5, 1.5]) plt.ylim([-0.5, 1.5]) plt....

May 15, 2022 · 2 min · 326 words · derbuihan

MNIST画像認識の実験

全結合層のネットワークや CNN を用いて MNIST 画像認識の実験をした。 実験環境 tensorflow v2.4.0 optimizer=‘adam’, loss=‘sparse_categorical_crossentropy’ MNIST のデータの中身 MNIST は 0~9 の手書き文字とそのラベルのデータセットである。 6 万枚の train データと 1 万枚の test データに分かれている。 この記事では、次のように前処理を行った。 import tensorflow as tf (X_train, y_train), (X_test, y_test) = tf.keras.datasets.mnist.load_data() X_train = X_train.astype('float32') / 255 X_test = X_test.astype('float32') / 255 0~255 の値を 255 で割ることで 0~1 の値にすることによって、勾配消失を防ぐことが出来る。 普通に学習 全結合のモデル (その 1) 下記のような全結合が 2 層のモデルを作った。 model = tf.keras.models.Sequential([ tf.keras.layers.Flatten(input_shape=(28, 28,)), tf.keras.layers.Dense(512, activation='relu'), tf.keras.layers.Dropout(0.25), tf.keras.layers.Dense(10, activation='softmax') ]) 全パラメータの数は 407,050。...

January 3, 2021 · 3 min · 475 words · derbuihan

Tensorflow Datasetsにある英語の巨大なテキストのデータセット

Tensorflow Datasets の中から英語の文章のデータセットをまとめます。 データの一覧の取得 以下のコマンドでtensorflow_datasetsから取得出来るデータセットの一覧がわかります。 >>> import tensorflow_datasets as tfds >>> tfds.list_builders() 英語のデータセット 大量のテキストのデータセット c4 Web クロールで集めた巨大なデータセット。英語のは約 1TB ある。 英語以外の言語もデータがあり、すべての言語合わせると 26.76TB あるらしい。 librispeech_lm 5GB のデータセット lm1b 5GB のデータセット pg19 古い本のデータセット。10GB ぐらい。 reddit_disentanglement reddit のデータセット。 wiki40b wikipedia のデータセット。きれいになってる。 wikipedia wikipedia のデータセット。きれいになってない。 その他データセット その他の使えそうなデータセット ag_news_subset ニュース記事のタイトルと説明文が、その記事の種類にラベル付けされたデータセット。 math_dataset 数学に関する英語の問題とその答えのデータセット tiny_shakespeare シェイクスピアの文章

December 23, 2020 · 1 min · 48 words · derbuihan

i7 870にTensorflowの環境構築方法

はじめに 落ちてた i7 870 のパソコンにグラボを 2 枚刺して、機械学習専用サーバーを作りました。 このとき、最新の Tensorflow をインストールしても使えないので苦労しました。 これは i7 870 は Sandy Bridge 以前の CPU なので AVX 命令がないのが原因です。 この記事では i7 870 でも機械学習が出来るように、少し古めの Tensorflow の環境を構築する方法を解説します。 この情報は 2020 年 12 月に出来た方法です。 前提 CUDA 10.2 Nvidia Driver Version: 440.100 Anaconda をインストール tensorflow v1.5.0 のインストール方法 はじめに、仮想環境の作成 $ conda create -n tf1 python==3.7 anaconda $ conda activate tf1 tensorflow-gpu v1.15.0 を指定してインストール $ conda install -c anaconda tensorflow-gpu==1.15.0 $ conda install -c anaconda keras ついでに、tensorflow-datasets をインストール(conda で入るのはバージョンが古いので pip でインストール)...

December 18, 2020 · 1 min · 174 words · derbuihan

これまでに使ってきたVPSのレビュー

私はこれまでにいくつか VPS を借りて運用してきました。 実際に借りて運用した VPS のレビューを書きます。 Scaleway CPU: 2Core x86 64bit メモリ: 2G SSD: 50GB 値段: 月 3 ユーロ (約 400 円) 場所: ヨーロッパ のプランを 2017 年 ~ 2019 年にかけて 2 年近く借りてました。 初めて自ら借りた VPS ということもあり長く借りていましたが、あんまり使っていないことに気づき解約しました。 場所がヨーロッパということもあり、SSH してコマンドを入力すると遅さを感じますが、Web サービスを運用する分には問題ないと思います。 この価格帯でメモリ 2GB、ストレージが SSD、通信が無制限な VPS は安いと思います。 mastodon や GitLab みたいなメモリをいっぱい使うサービスを運用するのにはオススメです。 Scaleway では CPU が ARM の VPS も貸していて、それも短い期間借りていた事がありますが、docker でサービスを運用したい場合は image が動かないので苦労したのでやめました。 GCE CPU: 2Core x86 64bit メモリ: 0.6GB HDD: 30GB 値段: 無料 場所: アメリカ西海岸 のプランを一年前から現在まで借りてます。 このプランは Google が無料で VPS を貸しているということで有名です。 私は wordpress でブログを運用しています。 メモリが 0....

January 4, 2020 · 1 min · 98 words · derbuihan

tensorflow-gpuをDockerで動かしたときにIllegal instructionと出たときの対処法

はじめに Docker 19.03 以降から Docker のコンテナから Nvidia GPU を使いやすくなりました。 tensorflow-gpu を Docker で使う場合は、公式のtensorflow/tensorflow:latest-gpu-py3があります。 エラーの内容 このコンテナを Sandy Bridge 以前の CPU で使うと Illegal instruction (core dumped) というエラーが出ます。 これは AVX という命令が古すぎる CPU にはないために起こるエラーです。 解決方法 解決方法は tensorflow をコンテナ内でビルドする 古い CPU でも動く tensorflow をどっかから取ってくる。 の二種類があります。 この記事では 2.を使い、Anaconda のリポジトリから取ってきた tensorflow-gpu を用いたDockerfileを書いたので紹介します。 使い方 Dockerfileを使ってください。 動作環境 Ubuntu 18.04 docker 19.03 以降 nvidia-driver-435 遊び方 環境がきちんと整っていれば次で動作すると思います。 $ git clone https://github.com/derbuihan/docker-tensorflow-gpu $ cd docker-tensorflow-gpu $ docker build -t mnist_sample . $ docker run --gpus device=0 -it --rm mnist_sample /bin/bash (base)$ conda activate tf-gpu (tf-gpu)$ wget https://raw....

October 3, 2019 · 1 min · 88 words · derbuihan

物理学科が半年ぐらい数学を独学で勉強した話

はじめに 物理を勉強していくうちに数学にも興味をもったので、学部 3 年生の後半から学部 4 年生になるまでの約半年間ひとりで数学を勉強しました。 数学科の人からすればまだ入門したてのペーペーでしょうが、独学で数学の勉強を始める方への助けになればと思い勉強法などを書いておきます。 数学の勉強を始める前に 数学の勉強を始める前に必ず知ってないといけないことがあります。 それは、必ず全ての証明を手で追わないといけないということです。 これをやらないと結局は定義も理解できませんし、勉強も長続きしません。 証明を手で追うためにはいくつかの必要な知識があります。 私は学部 2 年の頃にこれらの知識がなく数学の勉強を始めたので挫折しました。 まずはこれらのことを知ってから数学の本を読みましょう。 数学は論理で出来ている。 実は数学の勉強は論理学を勉強してからでないと始められません。私は文系の授業で論理学を学ぶ機会があり、そこで数学は論理学で出来ていることを知りました。論理学を勉強すると、数学の本に載っている定理もかなりのものが考えれば証明できるようになります。本としては前に書いた情報科学における論理とかでも良いかもしれませんがすこし難しいし、ここまでの知識は数学では求められていかもしれません。パソコンに詳しい人はこの pdfで Coq から論理学を勉強するのがおすすめです。 本を探すところから始まる。 たとえば、証明の書き方には本によって癖があります。 この定理を示すためには、〇〇と✗✗が必要である。 〇〇を示す。 〜〜〜 〇〇が示された。 ✗✗を示す。 〜〜〜 ✗✗が示された。 よって定理が示された。 と丁寧に書いてくれる本もあれば、 〜〜〜 〇〇が示された。 〜〜〜 ✗✗が示された。 〇〇と✗✗からこの定理が示された。 と淡白に書いてある本もあります。 かなり勉強していけばどちらで書いてあっても変わらないと感じるのかもしれませんが、はじめのうちは後者のように書かれるとすごく難しく感じます。 また、例が多すぎてなかなか前に進めない本や、つながりがわかりにくい本などいろいろな本があります。 私は一つの単元ごとに本を探すだけで 3 日ぐらいは時間を使っても良いと思ってます。 それぐらいには本選びは大事です。 たとえば集合・位相入門 松坂は有名ですが、独学で数学を一から始めるのであればこの本はおすすめしません。さっきの例でいうと後者のような証明の書き方をしていて難しく感じるからです。 勉強したこと 偉そうにいろいろ書きましたが、結局半年で何を勉強したのかと言いますと 集合と位相 代数系の最初の方 関数解析をフーリエ級数展開まで テンソル解析の最初の方 複素解析の復習 を、この順番に勉強しました。 最後の 3 つは物理学科の院試に向けて勉強した感じです。 一覧にするとそんなにやってない感じしますね… まあ、実際ペーペーなんですけど… 読んだ本 万人におすすめできるわけではないです。 こんな本もあるよって紹介です。 でも、この記事で紹介する本は全て私が数十時間かけて読んだ本です。 集合論 独学と自慢してましたが実は集合論だけは授業と演習の単位を取りました。 多分、どの大学でも集合と位相1みたいな授業は集合の授業のはずなので、それを取ると数学の勉強のやり方やリアルな研究者を見れて良いと思います。 集合論は数学の勉強を始めるなら一番はじめにやるべきです。 位相空間 位相は位相入門―距離空間と位相空間を読みました。 内容は絞っているように見えますが、証明はわかりやすく書いてあるので読みやすいです。 この本に書いてある以上の知識が求められる機会が今後の勉強であるのかは謎。 第二章は定理の番号がズレているので悲しい気持ちになります。...

July 7, 2019 · 1 min · 113 words · derbuihan

Elmで作ったものをGitLab CI/CDをつかってGitLab Pagesに公開する

Elm でフーリエ級数展開やライフゲームを制作したので CI/CD を試してみました。 この記事では Elm で作ったものを GitLab CI/CD を使って GitLab Pages に deploy する方法を紹介します。 コードを書く $ elm init $ vim src/Main.elm 今回はsrc/Main.elmを変換して公開します。 git 管理する GitLab のアカウントを持ってない人はアカウントを作ってください。 $ git init $ gibo dump elm > .gitignore $ git add elm.json src/Main.elm .gitignore $ git commit -m "first commit" $ git remote add origin git@gitlab.com:<username>/<reponame>.git $ git push --set-upstream origin master gibo は.gitignore を自動生成するコマンドです。(参考) .gitlab-ci.yml を作成 $ vim .gitlab-ci.yml 以下を.gitlab-ci.yml にコピペする...

April 8, 2019 · 1 min · 161 words · derbuihan