2024年5月26日日曜日

プログラミング言語の省略表記について

 ちょっと前にPythonを滅ぼそうやない会とかいう記事が投稿され、それに対するアンサー記事も投稿されるなどまあまあ賛否両論だった記憶があります。

個人的にはシンタックス云々に一部同意する部分もありつつ、でも英語の語順的にまあそうだろうなーというアンサー記事に同意する部分もありつつ、でも英語話者以外が使うことも考えてくれよなーと思いつつというどっちつかずの状態です。

個人的ついでに書くと、三項演算子やラムダ式などの省略記法は基本的に書きません。リストの内包表記も使いません。理由はあとで自分がすんなり読める自信がないから

「そんなもんも読めないお前のスキルが低いだけ」と言われたら返す言葉もないんですが、とはいえ大抵のプログラマーは数ヶ月前、いや数週間前に書いた自分のコードが理解できないという状況を経験しているはずで、なるべく平凡な書き方のほうが大抵の人が理解しやすいでしょう。

Pythonに限らず、他の言語でもあまり省略記法やシンタックスシュガーは使わない傾向ですね。例えばJavaScriptのオプショナルチェーンとかも使いません。

JavaScriptといえば、個人的には互換性を数十年引きずっているあの言語仕様はなんとかならんもんかと思ってます。とはいえ上澄みをすくおうと頑張っているAltJSが生まれては消え、スーパーセットを謳っているTypeScriptが事実上のデファクトスタンダードという現状を見ると、これが市場の意思なんだと納得するしかないですね。JSConfの運営ボランティアにも入っていながらこんなこと言うのもアレなんですが。

結局何を言いたいのかよくわからん記事になってしまいましたが、要するに自分は平凡なソースコードを書いてるよという極めて平凡な内容しか書いてないですね。

2024年5月19日日曜日

ReLU関数がよくわからない

 ニューラルネットワークの活性化関数にReLUってあるじゃないですか。あれがどうもよくわからんのです。

数学的な定義とか「正の値の微分が1なので勾配消失問題に強い」とかは知ってるんですけど、なぜこれを使うと精度が向上するのか、負の値を一律で0にすることがニューラルネットワーク上でどういう意味を持つのかがわかりません。

上でリンクを張ったWikipediaでは

2000年にHahnloseらによって強い生物学的動機と数学的正当化を持って、動的ネットワークへに導入された

とありますが、生物学的な動機ってなんだろう。。。

そしてPyTorchのseq2seqとAttentionのチュートリアルでは、デコーダーの単語埋め込み(ベクトル表現)に対してReLUを適用していますが、これって大丈夫なん?

ベクトル表現の負の値を0にしてしまうと別の単語が同じ表現になってしまったり、特に全ての要素が負の値で表現される単語があったら、ゼロベクトル(PADやUNKなどの特別な単語)として扱われたりするんじゃないかと。

まあ内部状態は刻々と変化するのでゼロベクトルが渡されたからといって毎回出力結果が同じになるわけじゃないですし、そうなることを織り込み済みで学習させているので問題ないという理屈なんでしょうか。

誰か詳しい人教えてください。生物学的動機についても。

2024年5月12日日曜日

プロジェクトを成功させる人

 𝕏で、時々勝手に引用ポスト(大抵は大喜利みたいなネタ)させてもらっているアカウントがいくつかあります。

その中の1つのアカウントで、こんなポストがありました。

自分だったらこういう質問に対してどう返すかな?というのが今回のテーマです。

2024年5月5日日曜日

zedのGentoo対応

 先日zedの記事を書きましたが、早速Gentoo用のebuildファイルの作成に取り掛かっています。

このへんを見るとtomlファイルから自動的にebuildを作るスクリプトもあるようですが、どうも依存パッケージの解決まわりがうまくいかず作業が止まっています。Rustなにもわからない。

とりあえず一旦ebuildファイルの作成は休憩して、Linux向けの依存パッケージインストールスクリプトをGentoo対応するPullRequestを出してみました。サクッとマージされてv0.134.1-preで導入されたようです。

これで、このドキュメントに沿ってGentooでビルドできるようになったはずです。ちなみに依存パッケージインストールスクリプトを実行するにはrustupも必要ですが、これはデフォルトではインストールできないのでキーワード指定する必要があります。

v0.134.1-preからLinux用のバイナリーも同梱されているようなので、どうにもならなければバイナリーをインストールするebuildを作ればいいのですが、せっかくのGentooなのでソースコードからビルドするebuildにチャレンジしています。あるいは誰かRustに強い人手を貸してください。