pinesの日記

気ままに書くブログです

データベース

データベースの操作(SQL)

  • 基本構造
    SELECT (列の名前) FROM (表の名前) WHERE (条件)
  • 派生(条件内部でSELECT文) WHERE 列名 IN ...で合致する行を抽出 (この場合副問い合わせで表が生成され、表に合致するものがある場合実行) WHERE EXIXT(副問い合わせは各行で実行され、その結果が正であれば本文が実行される)
    これら2つは最終的に得られるものが同じだが、一気に全部見る(IN)と行ごとに出力(EXISTS)という点で異なる

コミットとロールバック

暗号化

暗号化

暗号化方式

  • 共通鍵(秘密鍵)
    送受信で同じ鍵を使って暗号化と復号化する この鍵を第三者に知られると終わるから秘密鍵
    互いに鍵を共有する必要があるため、ユーザ数が多いと鍵の本数が膨大になってよろしくない 主な暗号化 AES(ブロック暗号化 128,192,256ビットから選択),DES
  • 公開鍵
    送信側:受信側の公開鍵で暗号化
    受信側:飛んできたものを自前の秘密鍵で復号
    共通鍵より暗号化や復号にめっちゃ時間がかかる
    主な暗号化:RSA(素因数分解の複雑さ 1024~4096ビット)

    ディジタル署名

    秘密鍵で暗号化したものは共通鍵でのみ復号できることを利用して改ざんの有無を確認できる
    メッセージをハッシュ関数で簡略化し、それを秘密鍵で暗号化してディジタル署名とする

    認証局

    あらかじめ公開鍵を登録しておくことでディジタル証明書による政党制の保証ができる

    PKI(公開鍵)

    認証機関(CA)と公開鍵の暗号技術を使って安全性を保障する仕組み全般の呼称

応用情報勉強 セキュリティ

不正アクセス

  • 辞書攻撃
    辞書に載っている単語をもとにパスワードで使われそうな文字列を辞書化して、パスワードを破ろうとする
    対策:パスワードはランダムに設定しよう
  • ブルートフォース攻撃
    力ずくで考えられる文字列すべてを入力してパスワードを破ろうとする
    対策:入力回数に制限を設けよう
  • スニッフィング
    パケットを盗聴し、その内容からパスワードを不正取得しようとする方法
    対策:暗号化して通信すべし
  • ゼロデイ攻撃
    脆弱性発覚後、それを修正するまでに攻撃されてしまうこと
    対策:サンドボックスなどの安全な環境でテストを実行し、脆弱性の事前解消に努める
  • クロスサイトスクリプティング
    Webサイトの掲示板など閲覧者が投稿できる入力フォームからページ内に悪意のあるスクリプトを埋め込む。ほかの閲覧者がページにアクセスするとスクリプトが実行される
    対策:入力フォームに入力された文字列を検査し、スクリプトを安全な文字列に変換する(サニタイジング)
  • フィッシング
    偽装サイトに利用者を誘導し個人情報を取得しようとする攻撃 正規業者を装った電子メールなどが用いられる
    対策:URLが本物か確認する癖をつけよう
  • DNSキャッシュポイズニング
    DNS(ドメイン名とIPアドレスを対応付けるシステム)のキャッシュに別のドメイン名を記憶させておき、偽装サイトへ誘導する方法
    対策:問い合わせに対する応答を電子署名で検証するDNSSECを使おう
  • ディレクトリトラバーサル攻撃
    CGIなどのファイル名やパスをパラメータとして受け取るプログラムに想定外のパスを渡すことで見えないファイルを閲覧可能にする
    対策:チェックして不正なパスを削除

応用情報勉強:システム構成要素

コンピュータの回路

論理回路

半加算器: 桁上がりなし(最下位の桁)
全加算器: 桁上がりあり(2桁目)

システムLSI

システムLSI(≒SoC): 全機能をまとめた1個のチップ➞複数まとめてSiP
PLD➞FPGA

コンピュータ制御

センサ➞コンピュータ➞アクチュエータ

制御方法

強化学習2日目

昨日の振り返り

強化学習のやり方には方策反復法と価値反復法がある
・方策反復法は結果から動き方を変え、価値反復法は予測するその後の報酬の合計を最大化するように方策を変える
・価値反復法のなかにはsarsaとQ学習法があり、次の段階の動きを知らずとも学習できるQ学習法(方策オフ型)のほうがよさそう
ε-greedy法で行動価値関数が最大になる行動を決定
→行動価値関数が正しいかわからないのでsarsaまたはQ学習法で行動価値関数を更新していく

※ただし価値反復法は制御対象が離散マルコフ過程でないと×

倒立振り子課題を強化学習で実装してみる

ローカルの環境構築メモ

つくりながら学ぶ!深層強化学習 PyTorchによる実践プログラミング | 株式会社電通国際情報サービス 小川雄太郎 | 工学 | Kindleストア | Amazon
これのp.73に書いてあるものを入れよう

連続値の状態を表形式表現するには?

・CartPoleの状態はカートの位置、速度、角度、角速度で決まる→これを離散化すればQ関数を表形式で表現できる
関数メモ
digitize
numpy.digitize — NumPy v1.21 Manual
binsの部分が閾値を決定している ここでは先に定義したbinsを持ってきてる
returnの部分
i=1~4においてdigitaized配列の各値×(分割数)iを計算し、その和を返す
enumerate
配列の要素にindexをつけるやつ?→なんでこれを使ってるのかがわからない

Q学習で実装

Agent:Q関数の更新と次の行動を決定→Brainクラスのオブジェクトをメンバ変数にもつ(Brainのひな型から作ったオブジェクト(データのまとまり)をクラス内で使える変数として持ってる(self.brainってやつ)) Brain:Q学習を実装(状態の離散化、Qテーブルの更新とQテーブルから行動決定)

応用情報技術者試験1日目

目標

10/10の試験に合格する

勉強法

・7月:1日1章ずつ参考書を読んで、何が得意で何が分かりにくいかをつかむ
・8月:サイトで問題を解く
・9月:過去問演習(直近10年分、かつここ2年分は除く) ・10月:進捗を優先させつつ調整

強化学習1日目

強化学習ってなに

強化学習とは

ある動作に対して望ましい結果を得られた場合、報酬を与えることでその動作を強化していく学習方法のこと

→時間変化を伴う場合でも最適な制御方法を取得できる

ニューロンレベルで脳の学習メカニズムと似ているため、ディープラーニング(深層学習)と相性〇

状態の縮約表現

状態:ある時刻での制御対象の様子

縮約表現:状態から重要な情報だけを取り出したもの→ロボットなど状態が連続するものはこの表現がやりにくい

では、どうするか

深層学習の導入

DNNは、多くの隠れ層を有することで画像データなどの複雑な入力データの状態の縮約が容易にできる →深層強化学習で状態の縮約を達成でき、学習可能になった