記録は作業の証

鉄道とコンピュータ

ゼロから作るDeep LearningをCommon Lispで書き直す(ステップ19)

ステップ19 変数を使いやすく このステップでは次の機能を実装する。 変数に名前を付けられるようにする。 変数から配列の形状を知ることができるアクセサを実装する。 プリティプリンタを実装する。 変数に名前を付ける <variable>クラスにnameスロットを足し、コンス</variable>…

ゼロから作るDeep LearningをCommon Lispで書き直す(ステップ18)

ソースコード ステップ18 メモリ使用量を減らすモード 計算の途中で得た微分は不要な場合が多いため、用が済んだら消去するように改良する。 また、逆伝播を無効にするモードも実装する。 モード切替を実装するにあたり、backward総称関数にキーワード引数を…

ゼロから作るDeep LearningをCommon Lispで書き直す(ステップ17)

ソースコード ステップ17 メモリ管理と循環参照 弱参照を使うことで、循環参照を解消し、メモリ使用量を減らす。 循環参照があると、参照カウント方式のメモリ管理では解放が難しいという。ガベージコレクタの方式によっては循環参照になっているオブジェク…

ゼロから作るDeep LearningをCommon Lispで書き直す(ステップ14~16)

ソースコード ステップ14 同じ変数を繰り返し使う 微分を累算して、同じ変数を使っても結果がおかしくならないようにする。 オリジナルのコードにある次のコード片をCommon Lispにどう翻訳するか少し悩んだ。そのままだと(@gradient x)という式があちこちに…

ゼロから作るDeep LearningをCommon Lispで書き直す(ステップ11~13)

ソースコード ステップ11 可変長の引数(順伝播編) 可変長引数を取り扱うため、callやforwardのシグネチャを変更し、関数の入力も出力もリストとなるよう変更する。 総称関数の特性上影響が大きく、コンパイルエラーを参考に直していくことになる。 ステップ1…

ゼロから作るDeep LearningをCommon Lispで書き直す(ステップ9~10)

ソースコード ステップ9 関数をより便利に まず、呼び出し側が毎回gradientに全要素が1の配列を設定しなければならないのを直す。 ユーティリティ関数として次のようなものを定義する。 (defun full-like (array fill-value) (let ((dims (array-dimensions …

ゼロから作るDeep LearningをCommon Lispで書き直す(ステップ4~8)

ソースコード ステップ4 数値微分 Common Lispでは0.942のような浮動小数点数リテラルを読み取ると、デフォルトで単精度浮動小数点数型(single-float)として扱ってしまう。この挙動は (setf *read-default-float-format* 'double-float) という行を挿入すれ…

ゼロから作るDeep LearningをCommon Lispで書き直す(ステップ1~3)

はじめに Common Lispで深層学習コンパイラを作っている人に感銘を受けたので、プログラミングの練習のためにと自分もCommon Lispで似たものを書いてみようと思い、この本を買った。 ゼロから作るDeep Learning ❸ ―フレームワーク編作者:斎藤 康毅オライリー…

Common Lispの開発環境を構築する

はじめに プログラミングを始めるには、どの言語でも開発環境の構築が必要である。この記事ではCommon Lispの開発環境をEmacsというテキストエディタとSteel Bank Common Lisp(以下SBCLと呼ぶ)という言語処理系を用いて説明する。 まず、SBCLをインストール…

netctl環境でpkgfile-update.serviceがfailする問題を直す

pkgfile pkgfileはファイルを所有しているパッケージを高速に検索できるプログラムである。そのパッケージをインストールしていなくても検索できるため、システムにないコマンドが入力されたら候補となるパッケージを提案するフックが作られている。 参考: p…

競技プログラミングにRustで参加するときに、なるべく高速で入出力する

この記事の続きです。 elderica.hatenablog.jp 自分のコードが遅い ここずっと、アルゴ式というサイトでいろいろな問題に挑戦しています。このサイトは競うためものではないので、正答例や解説を読んだり、他人のコードを読むのが簡単です。 自分はRustで解…

コンパイラの開発を通してプログラムの書き方について学ぶ取り組み

低レイヤを知りたい人のためのCコンパイラ作成入門 https://www.sigbus.info/compilerbook 困ったら見るリファレンス実装: https://github.com/rui314/chibicc 自分で写経(?)しているコード https://github.com/sbwhitecap/9cc 記録を取ることもなく黙々と…

Common Lispを学ぶためのリソース

まずはこの記事を読むことをおすすめします。 A Road to Common Lisp 翻訳 · GitHub 書籍 Practical Common Lisp(実践Common Lisp) gigamonkeys.com 一番最初に読むのに向いている。内容は古びてはいるものの、リスト遊びに終始するよりはるかに良い。日本語…

OpenSMTPDを使ってOutlook.com経由でメールを送る

前提とする環境はArch Linuxで公式パッケージからopensmtpdをインストールする場合。 まずMicrosoftアカウントでアプリパスワードを発行する。 パーミッションは640、所有ユーザはroot、所有グループはsmtpdとして/etc/smtpd/secretsを書く。 hogefuga myacc…

Vim/NeovimでLisp処理系と対話するためのプラグイン Vlime

導入 リポジトリはこちら github.com 公式マニュアル 公式チュートリアル Susam Pal 氏によるチュートリアル 設定 デフォルトでは'\'(バックスラッシュ)キーをプレフィクスとするコマンドを使う。 自分はカンマに設定している。 let g:vlime_leader = ',' " …

Rustで1行に数字が並ぶテキストを読む方法

はじめに AtCoderなどの競技プログラミングのプラットフォームでは、標準入力として空白と改行で区切られたテキストが与えられることが多い。 例 N A_1 A_2 ... A_N Rustでは入出力の記述が煩雑になりやすいとされているため、有志によってproconioというク…

TRPL読書記 1

はじめに 知り合いが「これからはRustを知らないとまずいぞ」というので、重い腰をあげてRustを勉強することにした。 まずはTRPLから読んでみることにし、とりあえず第三章まで読んだので練習問題の自分の解答をここに掲載してみる。 書いたコード 温度を華…

picoCTF Write-up ARMssembly 0

問題文 https://play.picoctf.org/practice/challenge/160 What integer does this program print with arguments 4134207980 and 950176538? File: chall.S Flag format: picoCTF{XXXXXXXX} -> (hex, lowercase, no 0x, and 32 bits. ex. 5614267 would be …

picoCTF Write-up keygenme-py

問題文 https://play.picoctf.org/practice/challenge/121 keygenme-trial.py 考えたこと Pythonスクリプトを読み解くことで解くようだ。読み解くことで次のことがわかる。 フラグに関連する文字列が格納された変数群がある。 key_part_static1_trial key_pa…

picoCTF Write-up caesar

問題文 https://play.picoctf.org/practice/challenge/64 Decrypt this message. 考えたこと ヒントにはシーザー暗号のことが書かれていたので、これで復号すればよさそう。 問題は鍵がわからないことである。アルファベットだけで26通り試す必要がある。 Cy…

picoCTF Write-up Easy1

問題文 The one time pad can be cryptographically secure, but not when you know the key. Can you solve this? We've given you the encrypted flag, key, and a table to help UFJKXQZQUNB with the key of SOLVECRYPTO. Can you use this table to sol…

picoCTF Write-up The Numbers

問題文 https://play.picoctf.org/practice/challenge/68 The numbers... what do they mean? 考えたこと リンクはPNG画像を指している。画像ビューアで開くと、数列が書かれている。 {や}があることから、フラグそのものの可能性がある。 色々考えたすえ、A…

picoCTF Write-up Transformation

問題文 https://play.picoctf.org/practice/challenge/104 I wonder what this really is... enc ''.join([chr((ord(flag[i]) << 8) + ord(flag[i + 1])) for i in range(0, len(flag), 2)]) 考えたこと encというファイルには、文字化けする謎のバイナリデ…