はてなキーワード: XORとは
Q.
生成AIにソフトウェア開発を支援してもらう場合、ソースコードの作成を依頼する形式が多いと思いますが、実行ファイルを直接出力してもらうことも技術的には可能なのでしょうか?
A.
生成AIによる実行ファイルの直接出力は、技術的には極めて困難です。現在のLLM(大規模言語モデル)ベースの生成AIは、ソースコードの生成には向いていますが、実行可能なバイナリファイルを直接出力することには根本的な制約があります。
技術的な制約
LLMはテキストベースのトークン処理を基本とする設計であり、バイナリデータを直接扱うことができません。実行ファイルは0と1の連続したバイナリコードですが、LLMはこの形式でデータを生成するようには訓練されていないため、バイナリファイルを直接出力することは現在のアーキテクチャでは実現が困難です。
従来のソフトウェア開発では、ソースコード→コンパイル→アセンブル→リンクという複数段階のプロセスを経て実行ファイルが生成されます。各段階で最適化や機械語への変換が行われるため、この過程を完全に省略してAIが直接バイナリを生成することは技術的に非常に複雑です。
研究レベルでは、バイナリデータを扱う試みも存在します。例えば、LLM4Decompileのような研究プロジェクトでは、バイナリコードを逆コンパイルする際にバイナリを一度アセンブリ言語に変換してからLLMで処理しています。逆に言えば、生成時も同様の変換プロセスが必要になると考えられます。
実務では、生成AIにソースコードを作成してもらい、それを従来のコンパイラやビルドツールで実行ファイルに変換する方式が標準的です。この方法であれば、デバッグやテストも容易で、生成されたコードの品質を確認しながら開発を進められます。
なお、フォントファイルのようなバイナリ形式でもオープンソースとして扱われる例はありますが、これはフォントという特定用途の場合であり、汎用的な実行ファイル生成とは異なります。
Q.
A.
おっしゃる通り、画像生成AIもバイナリを出力しているという点では共通していますが、実は根本的に異なる仕組みで動作しています。
アーキテクチャの違い
画像生成AIは拡散モデル(Diffusion Model)やGANなど、視覚データに最適化された専用のアーキテクチャを使用しています。一方、LLMはTransformerベースのテキスト処理に特化した構造を持っています。画像生成では、ノイズから段階的に画像を生成するプロセスを経て、最終的にピクセル値という数値データ(バイナリ)を出力します。
画像ファイルのバイナリは連続的な数値(ピクセル値)の集合であり、各ピクセルが色情報を持つという規則的な構造です。最近の研究では、画像をビットプレーン(bit-plane)として扱い、XOR演算でノイズを加えるBinary Diffusion Probabilistic Model(BDPM)のような手法も開発されています。
対して、実行ファイルのバイナリは機械語命令の複雑な配列であり、CPUが直接実行できる命令コード、データセクション、リンク情報などが厳密な形式で配置されています。わずかなビット誤りでもプログラムが動作しなくなるため、画像のような連続値とは性質が大きく異なります。
画像生成AIは、ImageNetやLAIONなどの大量の画像データセットで訓練されており、ピクセルパターンを学習します。一方、実行ファイルを生成するには、コンパイルプロセス全体(構文解析、最適化、機械語変換、リンク)を学習する必要がありますが、これは単純なパターン学習では実現できません。
したがって、画像生成AIが成功しているのは、画像という特定のドメインに特化した設計と、規則的なデータ構造があるためであり、同じ手法を実行ファイル生成に適用することは技術的に非常に困難です。
私としては国産なり日本発のLLM開発を諦めてはならないし, その可能性は十分にあると信じています. 既に出ているものも多数ございますし.
本エントリはそれとは全く別の,
「国産LLMの人」という方についてです.
---------
色々思うところがありまして.
例えば,
と繰り返し主張しておられる.
そのような単純な活性化関数では過学習か誤差が噴出するかの二択でしょう. 実際, 氏のツイートは正にその状態を示唆しているように見受けられます.
```x
▶︎ 誤差が0.12あるだけでとんでもないエラー率になる。誤差関数が雑だから本当はもっとあるのかもしれないが、改善の余地がある。
▶︎ 問題は、どのような状態の時に学習が成功し、失敗するのかがまだ分かっていない。表現力は十分に持っているはずなのに、なぜか学習しない。
```
過学習に至ったときにうまくいってるように見えるだけでしょう.
```x
▶︎過学習ではないですね。データセットが小さいかつ、それ以外の範囲が出ないことが分かっているので。XORは2^2パターン全て学習できれば精度が100%になりますが、それは過学習とは呼ばないのと同じで、今回の初期のRNNに関しても文字数が圧倒的に少なく、パターンも決まっているので。
```
……と主張されておられる.
私が思うにそれは単純な写像を, ニューロンを使って回り道して作っている状態. LLMは局所的にはたしかに線形写像ですが,全体で見ても線型写像だとしたらそれは複雑な文章生成には到底耐えられないかと. (十分に大きいモデルをマクロに見ると非線形性があるので)
大規模言語モデル=LLMを目指すとして,
そもそもエンベディングテーブルとは数百億から下手すれば1兆語彙を, たった数千〜1万次元程度のベクトルで表現する, 凄まじく繊細なテーブルです.
それをGELUやSwiGLUのような綺麗な活性化関数を使わずに, しかも爆速でやると仰っている. さすがにそのレベルの革新性を主張するには根拠がない限り, 飛躍が過ぎると判断されるかと.
そのやり方で, 例えば1億語彙までスケールするとして2乗の1京回×数千次元をバックプロパゲーションなしで学習するというのは……さすがにきついかと.
バックプロパゲーションが要らないという主張については活性化関数がきわめて単純だから. それなら全層に渡しても「修正」できるでしょう.つまり自明に近いですね.
勾配消失なんて関係ない, という主張については, xorというゼロイチでしか見ないのであれば勾配消失も何もありません. 永遠に層を貫通するわけですから, 何層増やそうがほとんど意味が出てこない. つまりそれは実際には極めて浅い層だけで動いてると思われる.
「こんに」から「ち」「は」が次文予測できたとの報告ですが, まぁ……それが「大規模言語モデル=LLM」にそのままスケールできると言い切れるのはなぜでしょうか?
MNISTだけでなくGLUEあたりをパスしてからにした方がいいと考える次第です.
```x
▶︎ 私が批判されながら、誤差逆伝播に変わるアルゴリズムや精度を30%→100%まで持っていく頭のおかしい行動が取れる理由は、以下の思想があるから。
▶︎ 1. 私のNNは高次元の万能近似回路
▶︎ 3. 何十回と失敗した経験則から、原因と対策が殆どわかっている
```
殆どわかってる, との事ですが, なんで上手くいってるのか分かってないとも自分で明言なさっている. ↓↓↓
```x
▶︎ 学習が進まないの、謎。単体だと上手く動いてるはず?何が原因だろうか。
▶︎ 学習アルゴリズム開発者本人ですが、なぜ学習が進むのかは謎です。
```
既存手法があまたの失敗の上で最適だと言われてきてる経緯もよく知った方がよい.
それはごく初期にそういった様々な試行錯誤のうえで「やはりGELUやBPが現実的にいい性能が出せるし, コストも抑えてこれである」と様々な研究者が合意しているような状況.
そして, そもそもアカデミアは自分のアイディアも含めて新規手法を常に疑ってかかるのが基本姿勢.
ジャーナルに「不確実さ」を載せないためで, それが積み重なると自他問わず全ての研究が信用出来なくなってしまうため. だから懐疑的になる. 個人攻撃ではないのです.
出さないのも自由ですが, 前述の理由で信頼を得られない. これは言動に一切関わらず, その厳密性をフラットに評価してそう判断しているから. 感情ではなく, 論理として.
……と, ここまで色々と蛇足なアドバイスをさせていただいたものの, この投稿に対しても
```x
▶︎ 何もわかってない人が国産LLMのやつ批判してて吹いたww
```
といったツイートをなさるのでしょう. (過去に氏がそう仰っていたので)
先に答えておきますね.
「自分のやってることがご自分でお分かりにならないようなら, 私にわかるわけがないですし仰る通りです. ただ, 詳しい者として一般論は申し上げられます.」
まだ間に合いますので, 大学院あたりまで修了なさるのがおすすめです.
Twitterに何を投稿しようと自由です. でも自分で違和感を見て見ないふりするのだけはやめたほうがよろしい. 既存手法と同等に自分の手法を疑うこと, これは研究者としての基本姿勢です.
研究テーマ設定を見かけるとついつい, より良い筋でやっていけるようアドバイスしたくなってしまう性が染み付いてしまっているためでして.
もちろん, 関わりのない方ですので蛇足でしかないのですが, 多くの方に影響力をお持ちでありつつ研究の進め方については独自の姿勢を持つように見受けられまして.
それはもちろん根本的には自由でありつつ, 相談相手の需要がもしあればひとつの(一般的)意見をお渡しできるかなと思いキーボードを叩いた次第です.
どうか匿名でご勘弁を.
--------
【追記】
おそらく氏のやられていることは順伝播 (forward propagation) のみでの学習かと思いますが, この手法の先行研究は山のように存在します.
(Hebbian theory, Perceptron, Adaptive Linear Neuron:ADALIN, Widrow-Hoff learning rule...)
見つけられないとすれば, 古典的 (1960~1980年頃) ゆえに電子化されていないためです. 現行の商用LLMがそれらの情報を簡単に連想して引用できず, DR等で検索しても出てこないのはその為でしょう.
これらに簡単にアクセスするためにはやはり学術機関に所属して図書館を利用するのが圧倒的に楽です. マイクロフィルムや紙媒体でしか残っていないものもありますから.
また, 有料データベースであるJSTOR, IEEE Xplore, Springer Linkなどにもアクセスが出来ます.
なお, arXivはあくまでプレプリントですので, 論文として引用するには査読を通過したものをつよく推奨します. ジャーナルもものによっては不十分な査読で掲載されてしまいますので, トップカンファレンスのものを信頼できる足がかりの論理として扱うのが基本的な考え方となります.
また, 「分からなければ (大量に貼った) 論文を読んでください」という姿勢は, それぞれをどう引用し, どのように自分の主張と論理的に接続するかの説明がなされなければ根拠として見なされないのが一般的な考え方です.
ブログとしての掲載はもちろん自由ですが, それらを十分な説明として取り扱ってもらうには至らないでしょう.
論文を引用するからにはそういった丁寧な取り扱いをすることを期待されるものです. 「敬意がない」と他の方から指摘されるのはおそらくそれが理由でしょう.
これは, 過去の論文を引用しながら新たな主張を論文として営々と積み上げ続けてきたアカデミアの「過去への感謝」という慣習です.
人の行動は自由ですから「こうしろ」とは申し上げませんが, この暗黙の了解を保持する (≈研究機関に所属したことのある) 方からの理解を得るのはこのままですときわめて難しいであろう, とアドバイスさせてください.
こういった主張のやり方を自分なりに一から身につけるのはたいへん難しいので, どなたかそういった手法を学べる信頼できる方に師事することをおすすめしている次第です.
プログラムの動作は、NANDゲートという基本的な要素から複雑なデジタル回路へと段階的に構築されることで実現されます。NANDゲートは、入力が両方とも真(1)の場合にのみ偽(0)を出力し、それ以外の場合は真(1)を出力する論理ゲートです このNANDゲートが、デジタル回路の基本的な構成要素として機能します.
NANDゲートは、それ自体が万能ゲート(universal gate)であり、これだけで他のすべての基本的な論理ゲート(NOT、AND、OR)を構成できます.
基本的な論理ゲートを組み合わせることで、加算器やマルチプレクサなどのより複雑な組み合わせ論理回路を構築できます。
組み合わせ論理回路にフィードバックループを導入することで、順序回路が実現されます。順序回路は、現在の入力だけでなく、過去の状態にも依存した出力を生成できます。
上記の要素を組み合わせることで、プロセッサ(CPU)を構成できます。
プログラムは、一連の命令としてメモリに格納されます。プロセッサは、プログラムカウンタが指すアドレスから命令を読み出し、命令デコーダで解釈し、制御ユニットの制御下でALUなどの各ユニットが動作することで、プログラムが実行されます。このプロセスを繰り返すことで、プログラムは順次実行されていきます。
このように、NANDゲートという単純な要素から出発して、段階的に複雑な回路を構成することで、プログラムの実行に必要なすべての要素が実現されます。
注目の科学論文数、日本は過去最低の13位 1位中国、2位米国
増田は某国立大学の工学部で教鞭をとる40代の准教授である。その視点からの話であることはご承知おきたい。
こういう記事のブクマには政策が悪いとか選択と集中が悪いとか色々つくが、社会が構造的に「向いていない」という話を書きたくてここに書く。
みんな気になるだろうから、これを先に書く。
最近になってにわかに科学研究が大事ということになって色々な研究予算が付くようになった。工学部だと企業との共同研究のお話なんかももらえるので、えり好みしなければ研究費を取りやすい環境にある。
どういうことかというと、この手のお金は期限がついていたり使途が決まっていたり、いろいろと紐がついている。そして、必要なところには回せないことが大半なのだ。
例えば人件費。民間企業ではありえないことだが、国立大が人ひとりを無期雇用で雇うためには、退職までの予算を確保することが必須なのだ。国からの運営費交付金や寄付金のような、必ず退職まで支払われることが確実な予算で裏付けないと無期雇用の人を雇えない。民間企業なら、人を雇うときに予め退職までの給料を積み立てておくというようなことはせず、営業を頑張って給料を払うだけの売り上げを確保するものだと思うが、国立大ではそういうわけにはいかない。色々な企業との共同研究を締結し、外部資金を獲得して、その人の給料を確保する、仮にできなかったら身銭を切ると教授が宣言しても、そういう期限付きの契約では無期雇用の人を雇えないのだ。
秘書や事務職員ならまだしも実験機材を維持管理する技術職員とか、研究員とかもこの縛りを受けるので、必要な人を必要なだけ確保することができない。運営費交付金は人件費だけでなく建物や設備の営繕にも使われるのだから、やれ70年代80年代に建てられた校舎の改築だとか、光熱水費だとか、とにかく運営費交付金の増額が望めず物価が上昇し続ける昨今、大学にはお金が無いのだ。
ちなみに、外部資金をたくさん取ってきたからと言って自由に使えるわけでもない。大概の研究費は他の外部資金と混ぜて使ってはいけない縛りがあるので、例えば研究費A で岡山の学会へ行き、次の日から研究費Bで広島の共同研究先で実験をする、みたいな場合でも、いったん大阪の自宅へ帰って一晩滞在することで研究費を分けないといけない。実験機材も合わせて購入するということはできない。100万円の研究費をふたつつかって150万円の機材を買うことはできないのだ。これが研究費は増えてもお金が無い、という事情の内幕である。
昔からアルバイトに熱心な学生やサークル活動に精を出しすぎな学生は確かにいた。最近は就職活動に時間をかけすぎな学生が多い。夏休みはおろか授業期間中もインターンにかかりきりだし、ウェブテストの後で何度も面接をさせられ、いきおい、学生は疲弊している。日中の貴重な時間を研究室ではなく就活に費やし、奨学金や親からの仕送りでは足りない学生はアルバイトまでしているのだから、卒論や修論の質は落ちる。企業はガクチカとか聞く前に、理系の学生を研究室で研究させてあげてほしい。学部生の卒論は半年から1年しか期間が無いのに最後の数か月を除いて就活とまるかぶりだし、2年間しかない修士課程の1年は就職活動で消えている現状で、大学から研究成果が出ないと言われても、どうしようもない。
研究というのは、専門書を読み、先行研究を調べ、仮説を立て、手を動かして仮説を検証し、その結果を文書にまとめるサイクルである。これがきちんとできる学生であれば、どんな仕事に就いても立派に働ける。たぶん。
というか、企業の採用も、もっと必要な資格や能力を具体的に書いてほしい。今どきの学生は真面目なので、特定の資格を持っていると就職に有利だとわかればそれを取るようになる。大学だって国の資格などであれば学科免除などを取りに行って「就職に有利」みたいな売り文句で学生を集めやすい。どんな企業だって欲しい資格や能力は採用時点で分かっているはずなのだから、それくらい明かしてくれてもよかろう。
博士課程の大学院生、というのは研究を進めるうえで大変貴重な戦力である。なにしろある程度は自力で研究を進めてくれるし、そのレベルも論文として世に問えるものである。
ところが、である。ちょっと考えてほしいのが博士課程の魅力だ。日本の博士課程は、基本的には学費を納入して「学ばせてもらう」スタイルである。その分研究テーマの自由度は高いし専門性を高めやすい。一方で、ある程度経済的に恵まれていないと、3年間の生活をどう工面するかという問題が常に付きまとってしまう。最近は、学振の特別研究員のような昔からある登竜門的に限らず、各大学の工夫や国の政策で博士課程進学者を経済的に援助する仕組みが整い始めている。とはいえ、それらに通らなければ学費や生活費を調達せねばならないし、採否の通知は年度末か入学後なので、まったく安心できない。どれほど優秀であろうと研究に向いていようと、金がない学生は就活するしかないのだ。
さらに、就活に際しても博士課程は買ってもらえない。就活サイトを見ればわかるが、技術職採用でも研究職採用でも、博士号持ちの人の初任給は明示されない。修士課程の初任給しか書かれていない。これを見た学生は、修士号持ちと博士号持ちの初任給は同額だと理解する。聞くところによると、博士号持ちの初任給は修士号の入社三年目くらいかそれ以上らしいのだが、書かれていない情報などあてにできないので、就活する側からみると前述の理解となる。これでは、博士号を取っても何も良いことはなさそうである。
欧米ではではの出羽守だが、海の向こうでは、博士課程というのはプロジェクトから人件費を支給される研究員である。仕事の扱いだから労基法にも守られる。しかも、博士号を取れば仕事の口も増えるし給料も上がる。
ドイツなんかに行くと、博士号持ちは英語さえ話せれば仕事に就けるが、修士号まではドイツ語を話せないと仕事がない。Dr. と表札に書けるオマケはさておくにしても、それくらい社会的な扱いに差があるのだ。もちろん、給与の出どころである研究プロジェクトが終わると別のプロジェクトで雇われるまで博士課程を続けられないとか、プロジェクトの元締めである指導教員と相性が悪いと人生大惨事になるとか、いろいろなデメリットもあるが「博士課程の研究員」という仕事に就いている扱いなので、無理だと思うとみんな中途採用で企業に転職したりする。それくらい、普通の仕事の扱いであれば進学者も増えるだろうし、博士号を取っておけば食うに困らないくらいの扱いになってくれれば、みんな喜んで進学してくれるんじゃないかと思うがいかがだろうか。
大学に安定的な予算が十分ないために人を雇えないという話を最初に書いたが、そのツケをどう払っているかというと、パーマネントの教職員が頑張って回している。いや、有期雇用の教職員にやらせることもあるけど。来年度には任期切れで退職するような教員に入試問題を作らせたりされてよいものか?高校への出前講座とかアウトリーチ活動が必要だと言われたときに来年退職する先生を送り込んで誰が進学してくれるのか?定年退職した技術職員の後任は予算不足で雇えませんでした、となったときに機材の修繕を誰がやるのか?それでなくても、学生の就職や研究指導の面倒は必須である。
というわけで、大学の先生は講義以外にもやることがだくさんあるのだ。とても研究をしている場合ではない。雑務と呼ぶ人もいるが、講義や研究以外にも誰かがやらねばいけない仕事なのだから「雑」はないだろう。とはいえ、昔は若手の教員がやっていたような事柄も、若手ほど任期付きになってしまったのでシニアの教員がやらねばならなかったり、幸運にも無期雇用を勝ち取った若手に集中してきたりするので、DXで仕事の効率が2倍になっても仕事は3倍に増えるのだ。偉い先生方は偉い先生方で、改革と称して新しい企画を立てないと予算をくれなくなったので、朝令暮改もいいところのマイナーチェンジでお茶を濁したような企画書をいかに気宇壮大に書き直して追加予算をゲットするかに時間を使っている。夏休みも暇かといえばさにあらず、老いも若きも科研費などの外部資金の申請書と格闘している。倍率が10倍近くても、何とかして手に入れないと満足に研究ができないのだから仕方がない。
ちなみに、大学によって、また学部学科によって異なるが、国立大の教員が競争的資金なしに受け取れる、平たく言うと自由裁量経費みたいなものは、年10万~30万円くらいである。国際学会の参加費が10万円を超え、海外の論文誌の投稿料も10万円くらい取られるこのご時世に、である。どれほど世紀の大発見をしようとも、世に問うためには論文化して論文誌に掲載されねばならず、掲載されるためには投稿料を払わねばならないのだ。そして、その投稿料ともらえる経費がほぼ同額ということは、外部資金が無ければ研究 XOR 投稿という選択肢になってしまう。日本の論文誌であればもう少し安く、数万円で済む。ただ、そういうところに掲載されても「注目の科学論文数」にカウントされることはない。これが現状である。
それにしても、研究をして論文を書いて世に問うためには先立つものが必要で、それが外部資金が無ければ全く足りていない、という状況であるにもかかわらず、外部資金を取るためには論文を世に出さねばならないというのは何とも困ったものである。このあたりの必要経費と割り当て予算のアンバランスはどうにかならないものだろうか。
というわけで、大学の先生というのは、外部資金が無ければ研究ができないために年中予算の確保に腐心しており講義や学生指導は当然やるのだから、研究をしている暇はない。その先生を雇うお金はもちろんそれを支えるスタッフを雇う予算すら、外部資金のようなひも付き予算からは支出できないために全学的に人手不足の状況で、この傾向は悪化こそすれ当面改善する気配はない。代わって研究の主力となりえるのは博士課程の大学院生くらいだが、日本人の学生ほどこっち方面のキャリアに魅力を感じずに就職してしまう。それどころか就職活動は過去にもまして無暗と時間を食うような仕組みになってきており、研究活動でスキルアップさせようもない。これが日本社会の現状である。
これ自体がプログラミング言語の機能だと思ってるんじゃないかと
だからXORについても、なにかプログラミング言語の力で「左辺だけで演算結果を得られる方法があるのでは」という発想が出るんじゃないかと
プログラミングの基本的手法の1つに、論理演算というものがある。
これは真偽値(真=true、偽=false)同士の組み合わせを評価し、結果をtrue/falseで返すというものだ。
この演算のための演算子の代表的なものがANDとORで、それぞれ論理積と論理和という。
式aとbにtrue/falseのいずれかが定義されているとして、
a AND bだったらaとb両方がtrueのときのみ、演算結果がtrueになり、
a OR bだったらaとbいずれかがtrueであれば、演算結果がtrueになる。
ということは、
ANDの場合は左辺の式がfalseの時点で、右辺を評価するまでもなく演算結果はfalseとなり、
ORの場合は左辺の式がtrueの時点で、右辺を評価するまでもなく演算結果はtrueとなる。
これを短絡評価といい、今どきのプログラミング言語では必ずこの仕掛けが実装されていると。
これは排他的論理和といい、演算子の右辺と左辺の結果が違う組み合わせの場合のみtrueとなる。
つまりa=trueかつb=falseの場合か、a=falseかつb=trueの場合のみ、演算結果(a XOR b)がtrueとなる。
問題は、どういうわけかこのXORには短絡評価が存在しないのだ。
どのプログラミング言語を調べても短絡評価がないので、かなり驚いている。
一体どういうこと?
(追記)
だからBOOLの場合flagが偽の場合flag++をすると真になるが
真を++しても偽にはならない事が多い
他方boolの場合は
int i;
bool f = i &1;
にかなり近いから
f = f&1;
の場合 f++をすると偽にはなるが遅い そのためFlagを似せにするときはXORを使う
というのはプログラマーがやることであって 無理やりコンパイラーでやろうとするから 遅くなる
プログラマーなどいらない、おれたちはミスなど許さない俺たちは全知全能の完璧だとでもおもっていないと、そんな事は起きない
これはしょうがないからプログラマーさんにお願いしようとおもっていると そうはならない
だから相手が人だった場合 侮辱している おまえらはどうせサルなみの頭が悪いから こんなことお願いできないと相手を侮辱していないとそんなことにはならない
肺炎であるコロナに、なぜか手を洗えというような食堂関係の指示が出ても
だから肺炎だからマスクのほうがいいなぁとおもっても、手を洗う
飛沫が肺に入ったら大変だからな