精進日記 006
AtCoder精進
ある方のAtCoder submission記録をたどって,同じ精進すれば強くなるでしょう.という下心をもって,精進しました.
それぞれの問題の点数と作業時間を細かく記録してみました.200-300点くらいの問題をいくつか取り組みましたが,問題を読む時間は大体30sで,プログラミング時間は,バグなしの場合は2minくらいです.そして,テストして,提出するまではまた30sくらいかかりました.バグがある場合や,考察が甘くて,解法に問題があった場合,さらに時間がかかりました.
なので,ちょっと時間をかけてもいいので,最後まで考えをまとめてからプログラムすると良いと思いました.
研究
ポアソンスパイク列について勉強しました.これまでの理解が間違ってて,ちゃんとスパイク間時間を算出するように訂正しました.
ABC169
大爆死.今までで一番低いパフォーマンスを出しました.理由としては,doubleに関する理解が足りなかったからです.そして,オーバーフローに気付かなかったところでした.ここら辺は慣れと知識が必要と思います.そして,細かいところにちゃんと気を配らないといけないなぁと思いました.
生活
いくら忙しくても,友達と家族に時々連絡しないといけないです.
精進日記 004
パーセプトロン実装
記事を書きましたので,下のリンクにご参照ください.
次は誤差逆伝搬法を実装する予定です.
競プロライブラリー整備
遅延セグメント木(sumとmin)
アルゴリズムは知ってたので,ライブラリーを整備しました.
二部グラフ判定
これも知ってたけど,調べると,賢い実装がありました.感動しました.
Union Findを使った考え方もあって,なるほどってなりました.
参考:
二部グラフ判定をUnionFindTreeで行う - noshi91のメモ
組合せ最適化について調べた
言葉は知ってましたけど,内容は知らなかったです.今日は「組合せ最適化」について調べて,ちょっとわかった気分になりました.つまり,いろんな条件下で,最適解を求める問題のことですね.
制約が小さいものは競プロとかでもよく出てくるし,制約が大きいものは近似解をだしたりして解決されているようです.研究のテーマとしても,盛んに研究されているらしいです.今度時間があったら,本でも借りて,読んでみたいです.
その他
- Scrapboxというものを見つけました.便利そうです.
- 数学関連のものをちょっとかじったけど,難しくて諦めました.
つぶやき
他人の作ったものを見て,すごいなぁと思います.私もそうなりたいと思うが,結構時間をかけないとできないことは分かってて,継続して頑張るしかないですね.
前の3日間の日記をもう一回読んで,3日前の自分と比べたら,確かに成長していますので,この調子で頑張りましょう!
精進日記 003
つぶやき
昨日は友達と就職のことについて話しました.やはり,大企業に行くことは多くの人の目標になっています.なぜなら,大企業ではよりいい給料,よりいい仕事環境(ハードウェア,ソフトウェア,人的資源)が提供されているからです.しかし,大企業といっても,雇用できる人数は限られていて,多くの学生に対しては狭き門だといえるでしょう.
私は高い目標を持っていましたが,最近では,幸せに暮らせればいいと思い始めました.(年を取ったからかなぁ?)この思いを持ったから,いろいろ生活に対する方法論も変わっていきました.昔は,大企業にどうしても行きたかったけど,今は入れるならばそれはそれでよくて,入れなくても,十分に生活できるなら全然いいとも思うようになりました.
ラズパイの組み立て
ラズパイちゃんが届いたので,早速組み立てました.ラズパイの組み立てや初期設定などについては,作業が終わったら記事にまとめて公開する予定です.
pythonの練習
関数に従う入力データと出力データを作りました.
import numpy as np PATH_X="input_x" PATH_Y="input_y" def main(): N = 2000 # number of test cases d = 2 # number of dimensions x = np.random.rand(N,2) * 10 # random numbers # result # y = np.array([(1 if x[i][0] > x[i][1] else 0) for i in range(N)]) y = np.array([int(k[0] > k[1]) for k in x]) np.save(PATH_X,x) np.save(PATH_Y,y) # test: xx = np.load(PATH_X+".npy") yy = np.load(PATH_Y+".npy") print(xx[0], yy[0]) if __name__ == "__main__": main()
精進日記 002
徹夜でテレビドラマ見てたので,まちゃくちゃねむいです.ちなみに,私は毎日8時間くらい寝ないと一日中ダメになるタイプの人です.
今朝は割と刺さることをYouTubeで見ました.昨日の記事でも話したように,なぜつかれるかというと,SNSなどで,めちゃくちゃ強い人を見て,「あ~本当に自分て何物でもないんだなって」と思ってしまうことが度々あります.ビデオによると,こう思ってしまうロジックは「何者でもないと思ってしまう」→「何者かになりたい?」→「注目されたい」→「人に自分の価値を認められたい」ということらしいです.そして,これは人間の根本的な考え方なので,自然と出てきます.しかし,自分は自分で,他人は他人なので,他人になる必要はなく,「人と違っていい」,「人より劣ってる部分があって当たり前」,「人より優れてる部分があって当たり前」,「違いを自分で受け入れることも大事」,「自分のやれることをやるだけやな」という結論になりました.確かにそうで,私もこれから,自分自身を認めつつ,できることからやってきたいと思います.ぜひこのビデオを見ていただきたいです.
部活
Random Walkをしました.各ターンで等確率で行けるところに移動する石があって,それがAからBまで移動するときのターン数の期待値を求める問題です.
(x,y)から終点に行くターン数の期待値をE(x,y)とすると,それぞれの(x,y)について,式
E(x,y)=sum(行けるところのE(x',y'))/(行けるところの数)+1
が得られます.すべての式を連立方程式として(gauss jordanの掃き出し法などで)解くと,E(x,y)の値を求めることができます.
という問題を勉強しました.
形式ニューロンの実装
勉強がてら,形式ニューロンを実装してみました.
pythonはまだまだ使えなくて,雑なコードかもしれないです.改善できる点があれば,教えていただけると嬉しいです.
# utils.py import numpy as np class Func: // ステップ関数 def step(x): if x > 0: return 1 return 0; // ReLU関数 def ReLU(x): if x > 0: return x return 0 // シグモイド関数 def sigmoid(x, eita = 1.): return 1/(1+np.exp(-eita*x)) class Cell: // 入力,荷重,閾値から算出したものを // シグモイド関数で正規化した出力を計算する def calc_z(x, w, h = 1): return Func.sigmoid(np.inner(x,w) - h)
参考資料
自粛中にSNS疲れについて思ったこと,https://www.youtube.com/watch?v=aox3fiqVfY8