【個人的メモ】深層学習の基礎
加算器を作成する
重みは入力の重要性、バイアスは活性化関数のシフト、活性化関数は発火の特徴
パーセプトロンはステップ関数(デジタル)、ニューラルネットワークはシグモイド関数(アナログ)
活性化関数は大きな入力に対し、大きな値を返す
線形の活性化関数は何層でも単一の線形関数で置換でき、多層の利点を活かせない
線形のAND・OR・NANDから非線形のXORを作成できるのは、非線形の活性化関数を使用したため
キャリーとオーバーフロー
第一オペランドをA、第二オペランドをB、計算結果をRとする。
キャリー(加算) = A + B の繰り上がり (符号なしの時の繰り上がりを検知する)
キャリー(減算) = A + (~B + 1) の繰り上がり (符号なしの時の繰り下がり無しを検知する)
オーバーフロー(加算) = (MSB(A) ^ MSB(R)) & (MSB(B) ^ MSB(R)) (符号ありの時のおかしな符号を検知する)
オーバーフロー(減算) = (MSB(A) ^ MSB(B)) & (MSB(A) ^ MSB(R)) (符号ありの時のおかしな符号を検知する)
符号なしでも符号ありでも、CPUは上記の計算を行っているだけである。
しかし、符号なしは0x00や0xffで非連続であり、符号ありは0x7fや0x80で非連続である。
この性質により、キャリーフラグは符号なし、オーバーフローは符号ありでのみ意味を持つことになる。
fgets()について
fgets(s, sz, fp)と引数を取ったとすると、
fpが適切なファイルを指していない場合や、szに0を指定した場合、szがどんな値であったとしてもsの内容は変更されず、fgetsはnullを返す
fpが適切なファイルを指しており、szに1以上の値を指定した場合、sの内容は文字列+'\0'の形で変更され、fgetsはsを返す
特にszが1の場合、sには'\0'だけが入るので注意
elf32の実行形式の「lea 0x4(%esp), %ecx」とは何なのか?
elf32では、main関数の最初にespを16bitの境界にアライメントする。
これは、おそらくSSE命令などのペナルティを避けるためだと考えられる。
しかし、単に「andl $0xfffffff0, %esp」などとすれば、スタートアップ関数直後のespの値が失われてしまう。
これは、mainが終了した時にまずいことが起こるため(スタックがずれてしまう可能性が非常に高い)、ecxにespの値を退避しておく必要がある。
ちなみに、なぜかelf64では同等のコードは生成されない。
(追記)
配列の範囲を超えてデータを書き込むことによるバッファオーバーフロー攻撃を行う際には、このコードが邪魔になることがある。
というのも、espのコピーを保存したecxの値はスタックにpushされて保管されるため、バッファオーバーフロー攻撃によってこれが破壊されるからである。
ecxの値が破壊されてしまうと、mainの終了間際にespの値が復元できなくなるため、プログラムがクラッシュする。
これを避けるためには、逆アセンブルしたコードを読んでecxの部分をピンポイントで避ける必要があるが、これは本当に面倒である。
もしかしたら、このコードはセキュリティを意識したものでもあるのかもしれない。(でも、64bitでは生成されないんだよなぁ...)
elf64ではこのようなコードは生成されないため、脳死でリターンアドレスを書き換えるだけで攻撃が成功する。
pオプションとsetresuid()について
まず、権限下げがない場合について
ノーマルはX
pオプションはO
setresuidはO
pオプション+setresuidはO
次に、権限下げがあった場合について
ノーマルはX
pオプションはX
setresuidはO
pオプション+setresuidはO
/bin/shや/bin/bashを起動する際に、実UIDと実行UIDが異なる場合は、/bin/shや/bin/bashが実行UIDに実UIDをセットしてしまうのは本当。
→権限下げがない場合のノーマルはXなのに対して、権限下げがない場合のpオプションはOであるから
pオプションは/bin/shや/bin/bashの権限下げには対応できるが、ターゲットプログラム内の権限下げには対応できない
→権限下げがない場合のpオプションはOであるが、権限下げがある場合のpオプションはXであるから
setresuidは/bin/shや/bin/bashの権限下げと、ターゲットプログラム内の権限下げの両方に対応している
→権限下げがない場合のsetresuidも、権限下げがある場合のsetresuidもOであるから
つまり、setresuidを使えば、pオプションを使う必要はない
車輪の国 向日葵の少女 その1
まずは自己紹介をしよう。
おれは森田健一(もりた けんいち)。
SF小説と姉貴が大好きだ。
いつも読んでる本の中で『日本』という国が出てくる。
あんたも知っているかもしれないが、面白おかしくて不思議な島国だ。
なにが面白いかって?
例えば現実じゃあ、人を殺したら『一生子供を持てない』罪を背負うだろう?
そして『特別高等人』というおっかねぇ連中の保護観察を受けることになる。
でも『日本』は違う。
人殺しは首吊って殺されるんだそうな。
もしくは十年か、二十年か、はたまた一生かわからんが・・・。
とにかく刑務所ってトコに入れられる。
刑務所は牢屋とか監獄ともいうらしくて、おれたちの国にはないものだから面白い。
この刑務所ってのが曲者で、人殺しも盗人も痴漢親父も、みんなココに入る。
犯罪者のテーマパークみたいな感じかな。
もう少し軽い罪・・・車のスピード違反なんかは国に金を払えばいいらしい。
首吊りか、刑務所か、金か・・・。
おれたちの国には罪に応じた罰が多種多様に細かく定められているけれど、日本には大きく分けてこの三つしかないらしい。
そんなんでヒトが更生するのかって、おれたちなんかは思うだろう?
・・・まあ、逆に、人殺しに子供を持てないようにするだけで世の中は大丈夫なのかと、問い詰められたら怪しいもんだ。
利己的な遺伝子がどうとか、犯罪形而上学がどうとか、宗教的とか自己の対立とか言ってる頭の偉い人たちが決めた法律に、おれたちはなんとなく従っている。
・・・なんとなく・・・ってのは『日本』にいる人たちも一緒なんだろうな。
だから、もうすでに決まっている法律や制度については、おれもよく語れない。
問題は『日本』にしろ、この『国』にしろ、そんな世の中でどうやって生きていくのかと。
俺みたいなぺーぺーが、どうやって姉貴と愛を結ぶのかと、そういう話だ。
ー近い未来、そう遠くない場所ー
・・・。
後ろを振り返らずに歩くこと六時間。
田舎ってのは少なからずバスが通っているもんだ。
ど田舎じゃあ、いい感じの爺さんがトラックの荷台に乗せてくれるかもしれない。
だが、おれの故郷は、田舎というよりむしろ秘境。
数学的帰納法ってなに?数学的演繹法はないの?
数学的帰納法はn=1のときに成り立つことを調べて、n=mのときに成り立つことを仮定してから、それが実はn=m+1のときでも成り立ちますということをするやつです。(語彙力)
簡単に解説すると、数学的帰納法では任意のmでの成立を仮定しますが、そのn=mのmの部分には1も含まれます。
それがn=m+1のときにも成り立つことがわかったのであれば、すでにn=1のときの証明はされているはずなので、とうぜんn=1+1のときや、n=1+1+1のときの証明もされていくことになります。
数学的演繹法は普段からみなさんがやっているやつで、AならばB、BならばC、Cならば...という風に、論理立てて証明していく方法です。
じゃあ、数学的帰納法は論理的じゃないのか!?とおもわれるかもしれませんが、はじめに立てる仮定(n=mのとき云々)以外は演繹法そのものなので安心してください。
n=1からはじめて、nが限りなく大きな自然数になるまでドミノのように証明されていくようすから、数学的帰納法という名前がつけられたみたいです。(でも、あんまりしっくりこない)