<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>未分類 - まったり勉強ノート</title>
	<atom:link href="https://www.mattari-benkyo-note.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.mattari-benkyo-note.com</link>
	<description>shuの日々の勉強まとめ</description>
	<lastBuildDate>Mon, 01 Sep 2025 21:58:19 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>
<site xmlns="com-wordpress:feed-additions:1">189243286</site>	<item>
		<title>基板から自作キーボードを作ったので自分も基板から作りたいと思った人へ</title>
		<link>https://www.mattari-benkyo-note.com/2025/09/02/diy_keyboard/</link>
					<comments>https://www.mattari-benkyo-note.com/2025/09/02/diy_keyboard/#respond</comments>
		
		<dc:creator><![CDATA[Shuji Suzuki (shu)]]></dc:creator>
		<pubDate>Mon, 01 Sep 2025 21:55:09 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[書籍]]></category>
		<category><![CDATA[自作キーボード]]></category>
		<guid isPermaLink="false">https://www.mattari-benkyo-note.com/?p=3300</guid>

					<description><![CDATA[<p>今回は初めて基板から自作キーボードを作りました。もともと基板から作る気はなかったのですが、同僚が「基板から作るのも難易度高くないですよ」とアドバイスしてくれて踏ん切りがついたので、挑戦しました。今回の記事はそんな基板から [&#8230;]</p>
<p>The post <a href="https://www.mattari-benkyo-note.com/2025/09/02/diy_keyboard/">基板から自作キーボードを作ったので自分も基板から作りたいと思った人へ</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>今回は初めて基板から自作キーボードを作りました。もともと基板から作る気はなかったのですが、同僚が「基板から作るのも難易度高くないですよ」とアドバイスしてくれて踏ん切りがついたので、挑戦しました。今回の記事はそんな基板から作る自作キーボードに初チャレンジする昔の自分のような人向けに、基板から作りたかったらどうすればいいのか？を紹介する記事になります。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="384" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2025/08/250826092521462-1-1024x384.jpg" alt="" class="wp-image-3302"/><figcaption class="wp-element-caption">初めて基板から作ったキーボード</figcaption></figure></div>


<h2 class="wp-block-heading">そもそもなぜ自作キーボードを基板から作ったか？</h2>



<p>Youtubeでたまに自作キーボードの紹介を見て、自分も欲しくなったため、今年になっていくつか自作キーボードのキットを買って自作キーボードを作るということをしています。</p>



<p>ただ、自作キーボードのキットは個人が作っているものが多く、人気なキットは入手難易度が高い印象です。</p>



<p>例えば、<a href="https://booth.pm/ja/items/6010869" target="_blank" rel="noopener" title="roBa">roBa</a>や<a href="https://booth.pm/ja/items/6376654" target="_blank" rel="noopener" title="">moNa2</a> などの無線＋分割+トラックボールのような人気のキットは、開発者の方が結構定期的に在庫補充してくれている印象ですが、在庫が入ったら数分で売り切れてまったく買える気配がありません。</p>



<p>また、この手の小型の分割キーボードは「自分ならここにキーがほしい！」という要求が使っているといろいろでてきます。</p>



<p>そんなわけで5月か6月ごろから「もうこれは自分でつくるか」ということで基板から設計をすることにしました。</p>



<h2 class="wp-block-heading">2025年8月現在、基板から自作キーボードを作りたくなったらどうすればいいか？</h2>



<p>自作キーボードに何を求めるか？で大分話が変わりますが、自分は以下のような要素がほしくて自作キーボードを作りました。</p>



<ol class="wp-block-list">
<li>分割キーボード</li>



<li>完全無線（分割キーボード間も無線だし、PCとキーボードの間も無線）</li>



<li>最低片側6カラム、合計12カラム</li>



<li>トラックボールあり（できればスクロールとカーソル操作を別々のボールで操作したいので二つ）</li>
</ol>



<p>自分と同じような要素を盛り込もうと思った場合、実は2025年8月現在はnoteで最高の資料が公開されています。</p>



<p>それが先ほど紹介したmoNa2を開発している白湯さんが書いたnoteの記事になります。</p>



<p><a href="https://note.com/pooh_polo/m/me4a885480f75" target="_blank" rel="noopener" title="">https://note.com/pooh_polo/m/me4a885480f75</a></p>



<p>このnoteのマガジンの記事では無線分割キーボードであるTweakbitというキーボードを作る流れなどが紹介されています。一部有料記事ではあるりますが、すごく安い＋キーボードを基板から自作した場合にかかる費用からすると誤差みたいな金額です。</p>



<p>このため、キーボードを作りたいと思った場合、現在なら有料記事も含めて全部1読することがまず1歩かと思います。</p>



<h2 class="wp-block-heading">それ以外の要素のキーボードを作りたいときの参考になりそうな資料は？</h2>



<p>要素ごとに参考になりそうな資料が微妙に違うのでカテゴリーわけして紹介していきます。一部重複する資料があります。</p>



<h3 class="wp-block-heading">Tweakbitからレイアウトを変えたい</h3>



<p>写真を見ればわかりますが、Tweakbitは格子状にスイッチを配置するオーソリニア配列です。これは基板から作る場合、作成の難易度が下がるので初心者向けのキーボードとしては作りやすくてよいのですが、ここを変えたいという要求がまずでてくると思います。</p>



<p>この場合、スイッチのレイアウトを事前に考えてからキーボードの基板を作るという流れになると思います。この辺の流れは以下の本が一番詳しく載っていました</p>



<ul class="wp-block-list">
<li>自作キーボード設計入門(電子版) (<a href="https://booth.pm/ja/items/1044084" target="_blank" rel="noopener" title="">https://booth.pm/ja/items/1044084</a>)</li>
</ul>



<h3 class="wp-block-heading">ケースにこだわりたい</h3>



<p>同じ基板でもケースが違うと印象がガラリと変わります。このため、ケースにこだわりたいという要求は出てくると思います。その場合はこちらの本がお勧めです。</p>



<ul class="wp-block-list">
<li>自作キーボード設計ガイド Vol2 ケース設計編 (<a href="https://salicylic-acid3.booth.pm/items/4982088" target="_blank" rel="noopener" title="">https://salicylic-acid3.booth.pm/items/4982088</a>)</li>
</ul>



<h3 class="wp-block-heading">Lipoバッテリーが怖いので有線にしたい</h3>



<p>無線のキーボード向けのマイコンでよく使われるのはSeeed XIAO BLE nRF52840なのですが、多くの場合Lipoバッテリーが使われます。これは万が一を考えると火事の原因になりえるので、怖いということを考えます。この場合は以下の資料がお勧めです。</p>



<ul class="wp-block-list">
<li>自作キーボード設計入門(電子版) (<a href="https://booth.pm/ja/items/1044084" target="_blank" rel="noopener" title="">https://booth.pm/ja/items/1044084</a>)</li>



<li>自作キーボード設計入門2(電子版) (<a href="https://booth.pm/ja/items/1315935" target="_blank" rel="noopener" title="">https://booth.pm/ja/items/1315935</a>)</li>
</ul>



<p>注意点としては2025/8現在、公開されているサンプルが少し違うなどの問題があるので、適宜現状に合わせて読み替える必要があります。</p>



<h2 class="wp-block-heading">初心者が基板から自作キーボードを作る際の注意点</h2>



<p>注意点としては以下の二つです</p>



<ol class="wp-block-list">
<li>2025年8月から大分あとの場合、いろいろ情報が古くなっている可能性がある</li>



<li>自分が盛り込みたい要素がTweakbitと違う部分がある場合、この記事の情報だけでは実現できない場合がある</li>
</ol>



<p>まず1についてです。これはもうどうしようもないと思いますが、情報が古くなった場合、例えばツールの使い方が変わっていて、初めて触る人は苦労するみたいなことが発生する可能性があります。</p>



<p>例えば、基板の設計時に使われるKiCadや3D CADのFusionはちょっと前の資料と今とで使い方が変わっている部分がありました。このような変化はある程度知識がある人にとっては特に問題ないことが多いと思いますが、初心者は苦労するポイントかと思います。</p>



<p>二つ目として白湯さんが題材にしているTweakbitと違う要素を盛り込みたいという場合です。例えばキー数は同じでキー配置を変えたいなどであればそれほど問題ないのですが、キー数を増やしたいは実は難易度がすごく上がります。</p>



<p>この話自体はnoteの記事に書かれていますが、Seeed XIAO BLE nRF52840というマイコンを使って、かつトラックボールありだと、普通にやったらTweakbitと同じキー数が限界になります。いろいろ裏技はあるので、増やせないことはないのですが、難易度は高くなると思います。</p>



<p>このようにキーボードに盛り込みたい要素に応じて難易度が変わるので、この点は注意してどのようなキーボードを作るか考える必要があります。</p>



<h2 class="wp-block-heading">基板から自作キーボードを作る際の苦労ポイント</h2>



<p>どの辺が大変なのかわかると参考になると思ったので、基板から作ることが初めての自分がどこに苦労したのか紹介しておこうと思います。</p>



<h3 class="wp-block-heading">1. キースイッチとトラックボールのレイアウトの試行錯誤に時間がかかった</h3>



<p>多分一番時間がかかったのがこの部分です。実は当初は全く知識がなかった基板の設計に一番時間がかかるのでは？と思ってたのですが、基板の設計は実は数時間できました。一方、予想よりもはるかに時間がかかったのがこのキースイッチとトラックボールのレイアウトです。</p>



<p>予想ではこの部分は自分が今使っている「KeyBall」シリーズを参考にして変えるつもりがほとんどなかったので、すぐ終わると思っていました。</p>



<p>ただ蓋をあけると、KeyBallとキー数が違うので、その部分の調整をしていたら、いろいろ調整したくなり、3D プリンターで試作をしていたら、だんだんトラックボールの位置を変えたくなり、調整してたら思った以上に時間がかかりました。</p>



<p>おそらく自分はキースイッチのレイアウトにある程度要望があったため、この部分に時間がかかったと思われるので、盛り込みたい要素の部分に時間がかかるのを覚悟するのが良いかともいます。</p>



<h3 class="wp-block-heading">2. ファームウェアの調整に時間かかった</h3>



<p>これは基板から作らない自作キーボードでもある程度時間がかかるところですが、できたキーボードのキーマップやトラックボールの設定に結構時間がかかりました。</p>



<p>普通の自作キーボードの場合、開発者の方が練りこんだキーマップをデフォルトにしてくれているおかげで、ユーザーは結構キーマップ作製の時間短縮ができる印象ですが、基板から作るとなると、参考にするキーマップがないので、いろいろ考えて結局時間がかかるということがありました。</p>



<p>トラックボールに関しても同様で、感度をいろいろ調整するのに時間がかかった印象があります。</p>



<h2 class="wp-block-heading">終わりに</h2>



<p>今回は基板から自作キーボードを作ったので、自分と同じように基板から作ってみたいと思っている人向けに記事を書いてみました。</p>



<p>この記事を見て「自分もできそう！」と思ってもらえれば幸いです。</p><p>The post <a href="https://www.mattari-benkyo-note.com/2025/09/02/diy_keyboard/">基板から自作キーボードを作ったので自分も基板から作りたいと思った人へ</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.mattari-benkyo-note.com/2025/09/02/diy_keyboard/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3300</post-id>	</item>
		<item>
		<title>[書評] NVIDIA 半導体の覇者が作り出す2040年の世界 ー NVIDIAという会社がどういう会社なのか知りたくなったら読べき一冊</title>
		<link>https://www.mattari-benkyo-note.com/2025/04/21/nvidia_book_review/</link>
					<comments>https://www.mattari-benkyo-note.com/2025/04/21/nvidia_book_review/#respond</comments>
		
		<dc:creator><![CDATA[Shuji Suzuki (shu)]]></dc:creator>
		<pubDate>Sun, 20 Apr 2025 23:30:00 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<guid isPermaLink="false">https://www.mattari-benkyo-note.com/?p=3281</guid>

					<description><![CDATA[<p>今日は最近、本屋さんに並んでいるので手にとった「NVIDIA 半導体の覇者が作り出す2040年の世界」という本を読んだので、その書評になります。 どんな内容の本か？ みなさん、NVIDIAと聞いてピンとくるでしょうか？P [&#8230;]</p>
<p>The post <a href="https://www.mattari-benkyo-note.com/2025/04/21/nvidia_book_review/">[書評] NVIDIA 半導体の覇者が作り出す2040年の世界 ー NVIDIAという会社がどういう会社なのか知りたくなったら読べき一冊</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>今日は最近、本屋さんに並んでいるので手にとった「<a href="https://amzn.to/4jG85pS" target="_blank" rel="noopener" title="">NVIDIA 半導体の覇者が作り出す2040年の世界</a>」という本を読んだので、その書評になります。</p>


		<div class="pochipp-box"
			data-id="3280"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="07b7454b" data-auto-update="true"		>
							<div class="pochipp-box__image">
					<a href="https://www.amazon.co.jp/dp/B0DH7HWJVP?tag=shu65-22&#038;linkCode=ogi&#038;th=1&#038;psc=1" rel="nofollow noopener" target="_blank">
						<img decoding="async" src="https://m.media-amazon.com/images/I/41-Bb-+-CVL._SL500_.jpg" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://www.amazon.co.jp/dp/B0DH7HWJVP?tag=shu65-22&#038;linkCode=ogi&#038;th=1&#038;psc=1" rel="nofollow noopener" target="_blank">
						エヌビディア 半導体の覇者が作り出す2040年の世界					</a>
				</div>

									<div class="pochipp-box__info">著:津田 建二</div>
				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/dp/B0DH7HWJVP?tag=shu65-22&#038;linkCode=ogi&#038;th=1&#038;psc=1" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FNVIDIA&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2FNVIDIA" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<h2 class="wp-block-heading">どんな内容の本か？</h2>



<p>みなさん、NVIDIAと聞いてピンとくるでしょうか？<br>PCに詳しい人であれば結構昔からGPUでお世話になっていたと思いますが、一般の人にとってはちょっと前は「謎の半導体企業」なんていわれるくらい馴染みのない会社だったのではないかと思います。ただ、最近は普通の経済ニュースでもよくNVIDIAの名前を見る気がするくらい一般の人でも知られる企業になったのではないかと思っています。<br>この本ではそんなNVIDIAについて、創業から現在に至るまでどのように成長し、そして今後についてどのように考えられていそうかが紹介されています。<br>個人的にNIVIDAは2000年後半から研究でGPUを使ってたこともあり、それ以降はそこそこ知っているつもりですが、創業当時の話はあまり知りませんでした。この本ではそのような時期についてもどのような苦労があったのか、そもそもなぜNVIDIAがGPUを作り始めたのかなどが簡単にですが紹介されています。<br>また、半導体事業がどのように変化していったのかも書かれているので、半導体事業についての歴史が知りたい人も読むと参考になる部分はあるかと思います。</p>



<h2 class="wp-block-heading">どんな人にお勧めか？</h2>



<p>今回の本は以下のような人にお勧めな本です。</p>



<ol class="wp-block-list">
<li>NVIDIAという会社について知りたいと思った方</li>



<li>半導体事業の歴史について知りたい方</li>
</ol>



<p>1に関しては特に創業期の話なんかは、本でしか見ることがないと思うので、その部分が知りたい方はお勧めだと思います。一方、NVIDIAが考える未来の部分はNVIDIAのイベントのGTCなどで語られている部分とかぶる部分が多く、GTCのkeynoteなどを見ている人は新しい部分はない気がしました。<br>2に関しては、NVIDIAの成長と半導体事業の変化がかなり密接に関係していることもあり、この本でもそこそこページを割かれて説明されています。この前紹介したTSMCの本と合わせて読むと理解がより深まると思います。</p>



<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="kPoz7nH7dX"><a href="https://www.mattari-benkyo-note.com/2025/03/10/tsmc-book-review/">[書評] TSMC ー 世界屈指の企業がどのように誕生したかを知りたくなったら読む一冊</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;[書評] TSMC ー 世界屈指の企業がどのように誕生したかを知りたくなったら読む一冊&#8221; &#8212; まったり勉強ノート" src="https://www.mattari-benkyo-note.com/2025/03/10/tsmc-book-review/embed/#?secret=LI3jlceVv3#?secret=kPoz7nH7dX" data-secret="kPoz7nH7dX" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<h2 class="wp-block-heading">個人的に良かった点</h2>



<p>今回の本で個人的には以下の点が良かったです。</p>



<ol class="wp-block-list">
<li>NVIDIAの創業期の話が知れた</li>



<li>日本の半導体事業の衰退要因として考えられるものが何なのか知れた</li>
</ol>



<p>1に関しては内容の紹介でも書いた通り、創業期でどのような考えがあり、どのような失敗があったのか、実はあまり知りませんでした。<br>この本ではそのようなエピソードも語られていて、非常に参考になりました。<br>また、この本はちょこちょこ日本の半導体事業の批判が書かれているのですが、その中でなぜ日本の半導体事業が衰退していったのか、アメリカと何が違ったのかが書かれています。このあたり、ちゃんと調べようと思ったことがなかったので、このような意見もあるのかと勉強になりました。</p>



<h2 class="wp-block-heading">終わりに</h2>



<p>今回は「<a href="https://amzn.to/4jG85pS" target="_blank" rel="noopener" title="">NVIDIA 半導体の覇者が作り出す2040年の世界</a>」という本を読んだのその紹介になります。NVIDIAは知っているようで知らない部分も多くあり、興味深い本でした。<br>定期的にこのように本の紹介記事を書いてます。もし興味があれば他の本の記事も見ていただければ幸いです。</p><p>The post <a href="https://www.mattari-benkyo-note.com/2025/04/21/nvidia_book_review/">[書評] NVIDIA 半導体の覇者が作り出す2040年の世界 ー NVIDIAという会社がどういう会社なのか知りたくなったら読べき一冊</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.mattari-benkyo-note.com/2025/04/21/nvidia_book_review/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3281</post-id>	</item>
		<item>
		<title> [書評] 引き算の子育て ー 子育てで思い悩んでたらお勧めな一冊</title>
		<link>https://www.mattari-benkyo-note.com/2025/03/24/parenting-by-subtraction-book-review/</link>
					<comments>https://www.mattari-benkyo-note.com/2025/03/24/parenting-by-subtraction-book-review/#respond</comments>
		
		<dc:creator><![CDATA[Shuji Suzuki (shu)]]></dc:creator>
		<pubDate>Sun, 23 Mar 2025 23:30:00 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<guid isPermaLink="false">https://www.mattari-benkyo-note.com/?p=3251</guid>

					<description><![CDATA[<p>今回の書評は子育て本で、「引き算の子育て」を同僚に勧められて読んだので、その紹介になります。 どんな内容の本か？ 子育てをしていると「あれもやったほうがいい、これもやったほうがいい」という話にあふれていて、結局何をやった [&#8230;]</p>
<p>The post <a href="https://www.mattari-benkyo-note.com/2025/03/24/parenting-by-subtraction-book-review/"> [書評] 引き算の子育て ー 子育てで思い悩んでたらお勧めな一冊</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>今回の書評は子育て本で、「<a href="https://amzn.to/4iAvx7Y" target="_blank" rel="noopener" title="">引き算の子育て</a>」を同僚に勧められて読んだので、その紹介になります。</p>



<h2 class="wp-block-heading">どんな内容の本か？</h2>



<p>子育てをしていると「あれもやったほうがいい、これもやったほうがいい」という話にあふれていて、結局何をやったらいいかわからない、ということはないでしょうか？私自身、子供が生まれてから子育て本を何冊か読んでいますが、結局どうすればいいのかわからなくなる時があります。<br>今回の「引き算の子育て」では「親が先回りしてやることなんてなにもない」ということを二人の有名な教育者がインタビュー形式で紹介してくれている本になります。<br>子育てはあれこれやってあげたくなることが多いですが、この本ではむしろ何かしてあげることにより、子供が家畜化してよくなく、むしろ余計なことはしないほうがいいということが書かれています。<br>また、このような考え方に至った経緯なども書かれていて、特に経緯がなかなかぶっ飛んでいるので、面白かったです。</p>



<h2 class="wp-block-heading">どんな人にお勧めか？</h2>



<p>今回は以下のような人におすすめな本になるかと思います。</p>



<ol class="wp-block-list">
<li>子育てについてあれこれ調べて悩んでいる方</li>



<li>子供に何かしてあげたいと思っている方</li>
</ol>



<p>特に1のようなあれこれ調べて結局どうしよう？ってなっている方が特にお勧めな気がします。<br>また、これから何かしてあげたいと思い始めている人も考え方の指針の一つとなると思うので読んでもよいかもしれないと思っています。<br>ただ、この本はインタビュー形式をとっていることもあり、よくあるハウツー的な教育本とは全然雰囲気が違うので、ハウツー本みたいな本を想像していると「思っているのと違った」となりそうなので、注意してください。</p>



<h2 class="wp-block-heading">個人的に良かった点</h2>



<p>個人的にこの本を読んで良かったこととしては以下の通りです。</p>



<ol class="wp-block-list">
<li>あれこれ考える前に子供をよく見るという当たり前のことをちゃんとやろうという考えに至った</li>



<li>あれこれ悩んでも子供が自分ごとに考えなくて良くないという考え方を知った</li>
</ol>



<p>1は当たり前といえば当たり前ですが、この本を読んで改めて思ったことです。結局子供はいろいろ違うので、その子はどうなのかを見てちゃんと考えることが重要なんだということを改めて感じました。<br>また、2は子育てじゃなくて部下の教育という文脈にも近い話ですが、結局あれこれ考える必要があるのは本人で、本人が考えることができる環境を用意することが重要なんだということを再確認しました。</p>



<h2 class="wp-block-heading">終わりに</h2>



<p>今回は同僚から紹介された「<a href="https://amzn.to/4iAvx7Y" target="_blank" rel="noopener" title="">引き算の子育て</a>」を読んだので、その記事になります。久しぶりにこの手のインタビュー形式の本を読んだおともあり、少し新鮮で面白かったです。<br>定期的にこのように本の紹介記事を書いてます。もし興味があれば他の本の記事も見ていただければ幸いです。</p><p>The post <a href="https://www.mattari-benkyo-note.com/2025/03/24/parenting-by-subtraction-book-review/"> [書評] 引き算の子育て ー 子育てで思い悩んでたらお勧めな一冊</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.mattari-benkyo-note.com/2025/03/24/parenting-by-subtraction-book-review/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">3251</post-id>	</item>
		<item>
		<title>[勉強ノート] 「拡散モデル　データ生成技術の数理」 3.1-3.5のVE-SDE部分について</title>
		<link>https://www.mattari-benkyo-note.com/2023/04/13/diffusion_model_book_3_ve_sde/</link>
					<comments>https://www.mattari-benkyo-note.com/2023/04/13/diffusion_model_book_3_ve_sde/#respond</comments>
		
		<dc:creator><![CDATA[Shuji Suzuki (shu)]]></dc:creator>
		<pubDate>Wed, 12 Apr 2023 21:59:03 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[pytorch]]></category>
		<category><![CDATA[拡散モデル]]></category>
		<category><![CDATA[書籍]]></category>
		<guid isPermaLink="false">https://www.mattari-benkyo-note.com/?p=2391</guid>

					<description><![CDATA[<p>先日紹介した「拡散モデル　データ生成技術の数理」をちゃんと理解するために数式を改めて追ったり、説明されているアルゴリズムを実装をしたりしたものをまとめた記事の第4弾です。今回は3章の分散発散型確率微分方程式 (VE-SD [&#8230;]</p>
<p>The post <a href="https://www.mattari-benkyo-note.com/2023/04/13/diffusion_model_book_3_ve_sde/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 3.1-3.5のVE-SDE部分について</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>先日紹介した「<a href="https://amzn.to/3SC3LMc" target="_blank" rel="noreferrer noopener">拡散モデル　データ生成技術の数理</a>」をちゃんと理解するために数式を改めて追ったり、説明されているアルゴリズムを実装をしたりしたものをまとめた記事の第4弾です。今回は3章の分散発散型確率微分方程式 (VE-SDE)の部分のコードを書いたのでVE-SDEの式の簡単な説明とコードの解説記事になります。</p>



<p>今回の記事はスコアベースモデル (SBM)はすでに理解している前提で説明していきます。もしスコアベースモデルがよくわからないという方はこちらに簡単な解説を書いたので参考にしてください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-まったり勉強ノート wp-block-embed-まったり勉強ノート"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="hky94vpgHi"><a href="https://www.mattari-benkyo-note.com/2023/03/08/diffusion_model_book_2_2/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.2 スコアベースモデル</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.2 スコアベースモデル&#8221; &#8212; まったり勉強ノート" src="https://www.mattari-benkyo-note.com/2023/03/08/diffusion_model_book_2_2/embed/#?secret=2YF8VdBkdb#?secret=hky94vpgHi" data-secret="hky94vpgHi" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p>今回のコードは以下のところにあげてありますので、コード全体を見たい方はこちらをご覧ください。</p>



<p><a href="https://github.com/shu65/diffusion-model-book/blob/main/diffusion_model_book_3_VE_SDE.ipynb">https://github.com/shu65/diffusion-model-book/blob/main/diffusion_model_book_3_VE_SDE.ipynb</a></p>



<h2 class="wp-block-heading">分散発散型確率微分方程式(VE-SDE)とは？</h2>



<p>この本の3章の前半部分で、2章で紹介しているスコアベースモデル (SBM)とデノイジング拡散確率モデル (DDPM) を確率微分方程式 (SDE) とみなすことができるという説明をしています。このうち、SBMのほうをSDE表現してでてくるものが分散発散型確率微分方程式 (VE-SDE)です。</p>



<h2 class="wp-block-heading">確率微分方程式(SDE)</h2>



<p>確率微分方程式（SDE; Stochastic Differential Equations）は次の式で与えられます。</p>



<p>$$ \begin{align} \text{d}\boldsymbol{x} = \boldsymbol{f}(\boldsymbol{x}, t)\text{d}t + \boldsymbol{G}(\boldsymbol{x}, t)\text{d}\boldsymbol{w} \tag{3.1} \end{align} $$</p>



<p>この式において\(\text{d}\boldsymbol{x} \)は\(\boldsymbol{x}\)の変化量です。この変化量は決定的に変化量である\(\boldsymbol{f}(\boldsymbol{x}, t)\text{d}t\)とランダムに変化する量である\(\boldsymbol{G}(\boldsymbol{x}, t)\text{d}\boldsymbol{w}\)の和で構成されています。</p>



<p>ここで、\(\boldsymbol{w}\)は標準ウィーナー過程またはブラウン運動ともよばれ、\(\text{d}\boldsymbol{w}\)は微小時間間隔\(\tau\)において平均が0、分散が\(\tau\)の正規分布とみなすことができます。</p>



<p>この確率微分方程式において\(\boldsymbol{f}(\cdot, t)\)はドリフト係数、\(\boldsymbol{G}(\cdot, t)\)は拡散係数と呼びます。</p>



<p>ただし、一般に拡散モデルで扱う確率微分方程式以下のようにドリフト係数が時間のみに依存する関数\(\boldsymbol{f}(t)\)と入力\(\boldsymbol{x}\)の積、拡散係数は時間のみに依存してスカラ値を出力する\(g(t)\)を使った確率微分方程式が利用されます。</p>



<p>$$ \begin{align} \text{d}\boldsymbol{x} = f(t)\boldsymbol{x}\text{d}t +g(t)\text{d}\boldsymbol{w} \tag{3.2} \end{align} $$</p>



<h2 class="wp-block-heading">スコアベースモデルの拡散過程をSDEで表現する</h2>



<p>スコアベースモデル(SBM)の拡散過程は以下のようになっていました。</p>



<p>$$ \begin{align} q(\boldsymbol{x}_i | \boldsymbol{x}) = \mathcal{N}(\boldsymbol{x}, \sigma_i^2\boldsymbol{I}) \tag{3.3} \end{align} $$</p>



<p>ここで\(i = 0,&#8230;, N\)です。この場合の拡散過程の1ステップは次のようになります。</p>



<p>$$ \begin{align} q(\boldsymbol{x}_i | \boldsymbol{x}_{i-1}) = \mathcal{N}(\boldsymbol{x}_i;\boldsymbol{x}_{i-1}, (\sigma_i^2 &#8211; \sigma_{i-1}^2)\boldsymbol{I}) \tag{3.4}<br>\end{align} $$</p>



<p>式(3.3), (3.4)は2章のほうで説明されています。この拡散過程の1ステップは変数変換を使うと以下のようになります。</p>



<p>$$ \begin{align} <br>\boldsymbol{x}_i &amp;=  \boldsymbol{x}_{i-1} + \sqrt{\sigma_i^2 &#8211; \sigma_{i-1}^2}\boldsymbol{z}_{i-1} \tag{3.5} \\<br>\boldsymbol{z}_{i-1} &amp;\sim  \mathcal{N}(0, \boldsymbol{I})  \tag{3.6} <br>\end{align} $$</p>



<p>ここで簡略化のために\(\sigma_0 = 0\) として考えます。</p>



<p>ここから\(N \rightarrow \infty\) とした極限を考えていきます。この時、\(i\)の代わりに\(t\)を用いて、\({\boldsymbol{x}_i}_{i=1}^N\)を連続的な確率過程\({\boldsymbol{x}_t}_{t=0}^1\)とし、\(\sigma_i\)を関数\(\sigma(t)\)、\(\boldsymbol{z}_{i}\)は\(\boldsymbol{z}(t)\)とします。</p>



<p>また、\(\Delta t=1/N\)とし、\(t \in \left\{0, \frac{1}{N},&#8230;, \frac{N-1}{N} \right\}\)とします。</p>



<p>この時式(3.5)の式は以下のようになります。</p>



<p>$$ \begin{align} \boldsymbol{x}(t + \Delta t) = \boldsymbol{x}(t) + \sqrt{\sigma(t + \Delta t)^2 &#8211; \sigma(t)^2}\boldsymbol{z}_{i-1} \tag{3.7} \end{align} $$</p>



<p>ここで\(\sigma(t + \Delta t)^2 &#8211; \sigma(t)^2\)の部分で1次近似を利用して式変形します。1次近似は以下の近似を指します。</p>



<p>$$ \begin{align} f(x + \Delta x) \approx \frac{\text{d}f(x)}{\text{d}x} \Delta x + f(x) \tag{3.8} \end{align} $$</p>



<p>この1次近似の式において\(f(x)\)の部分を\(\sigma(t)^2\)として置き換えると以下のようになります。</p>



<p>$$ \begin{align} \sigma(t + \Delta t)^2 \approx \frac{\text{d}[\sigma(t)^2]}{\text{d}t} \Delta t + \sigma(t)^2 \tag{3.9} \end{align} $$</p>



<p>この式の両辺を\(\sigma(t)^2\)で引くと以下のようになります。</p>



<p>$$ \begin{align} \sigma(t + \Delta t)^2 &#8211; \sigma(t)^2 \approx \frac{\text{d}[\sigma(t)^2]}{\text{d}t} \Delta t \tag{3.10} \end{align} $$</p>



<p>この式(3.10)を式(3.7)に代入すると以下のようになります。</p>



<p>$$ \begin{align} \boldsymbol{x}(t + \Delta t) = \boldsymbol{x}(t) + \sqrt{\frac{\text{d}[\sigma(t)^2]}{\text{d}t} \Delta t}\boldsymbol{z}(t) \tag{3.11} \end{align} $$</p>



<p>このあとの説明のために以下のように少し式変形をします。</p>



<p>$$ \begin{align}<br>\boldsymbol{x}(t + \Delta t) &amp;= \boldsymbol{x}(t) + \sqrt{\frac{\text{d}[\sigma(t)^2]}{\text{d}t} \Delta t}\boldsymbol{z}(t) \\<br>\boldsymbol{x}(t + \Delta t) &#8211; \boldsymbol{x}(t) &amp;= \sqrt{\frac{\text{d}[\sigma(t)^2]}{\text{d}t} \Delta t}\boldsymbol{z}(t) \\<br>\boldsymbol{x}(t + \Delta t) &#8211; \boldsymbol{x}(t) &amp;= \sqrt{\frac{\text{d}[\sigma(t)^2]}{\text{d}t}} \left(\sqrt{\Delta t}\boldsymbol{z}(t) \right) \tag{3.12}<br>\end{align} $$</p>



<p>さて、ここから\(\Delta t \to 0\) にしたときのことを考えます。式(3.12)の左辺のほうは以下のようになります。</p>



<p>$$ \begin{align}<br>\lim_{\Delta t \to 0} \boldsymbol{x}(t + \Delta t) &#8211; \boldsymbol{x}(t) = \text{d}\boldsymbol{x} \tag{3.13}<br>\end{align} $$</p>



<p>問題は右辺の\(\sqrt{\Delta t}\boldsymbol{z}(t) \)の部分です。これは結果的には以下のようになります。</p>



<p>$$ \begin{align}<br>\lim_{\Delta t \to 0} \sqrt{\Delta t}\boldsymbol{z}(t) = \text{d}\boldsymbol{w} \tag{3.14}<br>\end{align} $$</p>



<p>この部分ですが本も元論文[3] のほうにもこの式変形のところで言及がないのでわかりにくいので少し説明します。</p>



<p>まず、そもそも\(\text{d}\boldsymbol{w}\)は何であったか？ですが、これは最初に説明した通り標準ウィーナー過程またはブラウン運動ともよばれ、\(\text{d}\boldsymbol{w}\)は微小時間間隔\(\tau\)において平均が0、分散が\(\tau\)の正規分布とみなすことができます。このことから以下のように表すことができます。</p>



<p>$$ \begin{align}<br>\text{d}\boldsymbol{w} \sim \mathcal{N}(0,  \tau \boldsymbol{I}) \tag{3.15}<br>\end{align} $$</p>



<p>ここで\(\boldsymbol{z}(t)\)は </p>



<p>$$ \begin{align}<br>\boldsymbol{z}(t) \sim \mathcal{N}(0, \boldsymbol{I}) \tag{3.16} \\<br>\end{align} $$</p>



<p>なので、\(\text{d}\boldsymbol{w}\)は以下のようになります。</p>



<p>$$ \begin{align}<br>\text{d}\boldsymbol{w} = \sqrt{\tau} \boldsymbol{z}(t) \tag{3.17}<br>\end{align} $$</p>



<p>\(\tau\)が微小時間間隔なので式(3.14)と式(3.17)を見比べるとなんとなく式(3.14)が成り立ちそうだなぁと思います。ただ、極限を素直に考えると以下のようになるのでは？とずっと思ってました。</p>



<p>$$ \begin{align}<br>\lim_{\Delta t \to 0} \sqrt{\Delta t}\boldsymbol{z}(t) = 0<br>\end{align} $$</p>



<p>この部分、私は気になってしょうがなかったので、少し調べました。結論からいうとこの部分の式変形に関してはウィーナー過程の条件から導出できそうだということがわかりました。詳しくは以下のサイトが分かりやすかったので、詳しく知りたい方はご覧ください。</p>



<p><a href="http://takashiyoshino.random-walk.org/memo/keikaku_ensyu/node4.html" target="_blank" rel="noreferrer noopener">http://takashiyoshino.random-walk.org/memo/keikaku_ensyu/node4.html</a></p>



<p>ここでは簡単に説明します。まずウィーナー過程 \(\boldsymbol{w}(t)\)を考えます。ウィナー過程の条件より以下が成り立ちます。</p>



<p>$$ \begin{align}<br>\boldsymbol{w}(t + \Delta t) &#8211; \boldsymbol{w}(t) \sim \mathcal{N}(0, \Delta t \boldsymbol{I}) \tag{3.18}<br>\end{align} $$</p>



<p>ここで式(3.18)を右辺を見ると平均０、分散\(\Delta t\)の正規分布です。このため、式(3.18)は左辺は以下のように表すこともできます。</p>



<p>$$ \begin{align}<br>\boldsymbol{w}(t + \Delta t) &#8211; \boldsymbol{w}(t) = \sqrt{\Delta t}\boldsymbol{z}(t) \tag{3.19} \\<br>\end{align} $$</p>



<p>この式(3.19)の右辺は式(3.14)の左辺の\(\lim_{\Delta t \to 0}\)の中と同じになります。また式(3.19)の左辺は\(\Delta t \to 0\)のとき以下のようになります。</p>



<p>$$ \begin{align}<br>\lim_{\Delta t \to 0} \left( \boldsymbol{w}(t + \Delta t) &#8211; \boldsymbol{w}(t) \right) &amp;= \text{d}\boldsymbol{w} \tag{3.20}<br>\end{align} $$</p>



<p>よって式(3.14)は式(3.19)と(3.20)を使うと以下のようになります。</p>



<p>$$ \begin{align}<br>\lim_{\Delta t \to 0} \sqrt{\Delta t}\boldsymbol{z}(t) &amp;= \lim_{\Delta t \to 0} \left( \boldsymbol{w}(t + \Delta t) &#8211; \boldsymbol{w}(t) \right) \\<br>&amp;= \text{d}\boldsymbol{w} \tag{3.21}<br>\end{align} $$</p>



<p>この式変形なら個人的には納得できました。よって最終的に式(3.12)で\(\Delta t \to 0\) を考えると式(3.13)と式(3.21)より以下のようになります。</p>



<p>$$ \begin{align}<br>\text{d}\boldsymbol{x} &amp;= \lim_{\Delta t \to 0} \boldsymbol{x}(t + \Delta t) &#8211; \boldsymbol{x}(t) \\<br>&amp;= \lim_{\Delta t \to 0} \sqrt{\frac{\text{d}[\sigma(t)^2]}{\text{d}t}} \left(\sqrt{\Delta t}\boldsymbol{z}(t) \right) \\<br>&amp;= \sqrt{\frac{\text{d}[\sigma(t)^2]}{\text{d}t}} \boldsymbol{w}(t) \tag{3.22}<br>\end{align} $$</p>



<p>この式(3.22)を見るとドリフト係数\(f(t)\) と拡散係数\(g(t)\)が以下のようなSDEであることが分かります。</p>



<p>$$ \begin{align*}<br>f(t) &amp;= 0 \tag{3.23} \\<br>g(t) &amp;= \sqrt{\frac{\text{d}[\sigma(t)^2]}{\text{d}t}} \tag{3.24} \\<br>\end{align*} $$</p>



<p>これでSBMをSDEで表現することができました。このSBMの式から導出したSDEを分散発散型確率微分方程式 (VE-SDE)と呼びます。</p>



<h2 class="wp-block-heading">VE-SDEの学習</h2>



<p>VE-SDEの各時刻\(t\)のスコアを学習するあために、次の条件付き確率（拡散カーネル）を知る必要があります。</p>



<p>$$ \begin{align*}<br>p_{0t}(\boldsymbol{x}(t)|\boldsymbol{x}(0)) \tag{3.25}<br>\end{align*} $$</p>



<p>ここで\(p_{0t}\)は\(\boldsymbol{x}(0)\)を条件付けしたときの\(\boldsymbol{x}(t)\)の確率を表しています。</p>



<p>ここでSDEが以下の形として考えていきます。</p>



<p>$$ \begin{align} \text{d}\boldsymbol{x} = f(t)\boldsymbol{x}\text{d}t + g(t)\text{d}\boldsymbol{w} \end{align} \tag{3.26}$$</p>



<p>この場合、式(3.26)の条件付き確率は以下のような正規分布で表すことができます[1, 2]。</p>



<p>$$ \begin{align} <br>p_{0t}(\boldsymbol{x}(t)|\boldsymbol{x}(0)) =&amp; \mathcal{N}(s(t)\boldsymbol{x}(0), s(t)^2\sigma^{\prime}(t)^2\boldsymbol{I}) \tag{3.27} \\<br>s(t) =&amp; \text{exp}\left(\int_0^tf(\xi)\text{d}\xi\right) \tag{3.28} \\<br>\sigma^{\prime}(t) =&amp; \sqrt{\int_0^t \frac{g(\xi)^2}{s(\xi)^2}\text{d}\xi} \tag{3.29} \\<br> \end{align} $$</p>



<p>本のほうでは式(3.27)と式(3.29) の\(\sigma^{\prime}(t)\)の部分は\(\sigma(t)\)という表記になっています。ただ、VE-SDEのほうにも\(\sigma(t)\)があって区別ができないので、この記事では式(3.27)と(3.29)に登場する\(\sigma(t)\)を\(\sigma^{\prime}(t)\)として説明していきます。</p>



<p>VE-SDEの場合はこの式を使うと簡単に\(p_{0t}(\boldsymbol{x}(t)|\boldsymbol{x}(0))\)の形がわかるので、以下に示していきます。</p>



<p>まず、\(s(t)\)の部分ですが、VE-SDEの場合、式(3.23)から以下のようになります。</p>



<p>$$ \begin{align} <br>s(t) &amp;= \text{exp}\left(\int_0^tf(\xi)\text{d}\xi\right) \\<br>&amp;= \text{exp}\left(\int_0^t 0 \text{d}\xi\right) \\<br>&amp;= \text{exp}\left(0 \right) \\<br>&amp;= 1 \tag{3.30} \\<br> \end{align} $$</p>



<p>次に\(\sigma^{\prime}(t)\)に関してです。まず式(3.26)を使って式変形します。</p>



<p>$$ \begin{align} <br>\sigma^{\prime}(t) &amp;= \sqrt{\int_0^t \frac{g(\xi)^2}{s(\xi)^2}\text{d}\xi} \\<br>&amp;= \sqrt{\int_0^t \frac{g(\xi)^2}{1^2}\text{d}\xi} \\<br>&amp;= \sqrt{\int_0^t g(\xi)^2\text{d}\xi}  \tag{3.31} <br> \end{align} $$</p>



<p>ここでVE-SDEの\(g(t)\)は式(3.24)で分かっているのでこれを利用してさらに式変形します。</p>



<p>$$ \begin{align} <br>\sigma^{\prime}(t) &amp;= \sqrt{\int_0^t g(\xi)^2\text{d}\xi} \\<br>&amp;= \sqrt{\int_0^t \left( \sqrt{\frac{\text{d}[\sigma(\xi)^2]}{\text{d}\xi}} \right)^2\text{d}\xi } \\<br>&amp;= \sqrt{\int_0^t \frac{\text{d}[\sigma(\xi)^2]}{\text{d}\xi} \text{d}\xi } \\<br>&amp;= \sqrt{\sigma(t)^2 &#8211; \sigma(0)^2} \tag{3.32} <br> \end{align} $$</p>



<p>式変形した式(3.30)、(3.32)を式(3.27)に代入すると最終的には以下のようになります。</p>



<p>$$ \begin{align} <br>p_{0t}(\boldsymbol{x}(t)|\boldsymbol{x}(0)) &amp;= \mathcal{N}(s(t)\boldsymbol{x}(0), s(t)^2\sigma^{\prime}(t)^2\boldsymbol{I}) \\<br>&amp;= \mathcal{N}(\boldsymbol{x}(0), \left[\sigma(t)^2 &#8211; \sigma(0)^2\right]\boldsymbol{I}) \tag{3.33} <br>\end{align} $$</p>



<p>これによりVE-SDEの拡散過程の条件付き確率の式がわかりました。</p>



<p>本の説明では\(\sigma(t)\)が具体的にどのような式を使うのかまでは示してないため、式変形はここまでになっています。</p>



<p>一方、このブログではコードに落とすところまでをやるため、ここからさらに式変形していきます。ここから元論文の[3]を参考にして式変形していきます。</p>



<p>[3]の論文で使われている\(\sigma(t)\)と同じものを用いて説明していきます。[3]では以下のものが使われています。</p>



<p>$$ \begin{align} <br>\sigma(t) &amp;= \sigma_{min}\left( \frac{\sigma_{max}}{\sigma_{min}} \right)^t, &amp; \ t &amp;\in (0, 1]  \\<br>\sigma(0) &amp;= 0, &amp; \ t &amp;= 0 \\<br>\tag{3.34}<br>\end{align} $$</p>



<p>ここで\(\sigma_{min}\)と\(\sigma_{max}\)はハイパーパラメータです。</p>



<p>これを使って式(3.24)の\(g(t)\)と式(3.33)の条件付き確率の式変形をしていきます。</p>



<p>まず、式(3.24)の\(g(t)\)に関してです。</p>



<p>$$ \begin{align*}<br>g(t) &amp;= \sqrt{\frac{\text{d}[\sigma(t)^2]}{\text{d}t}} \\<br>&amp;= \sqrt{\frac{\text{d}}{\text{d}t} \left( \sigma_{min}\left( \frac{\sigma_{max}}{\sigma_{min}} \right)^t  \right)^2} \\<br>&amp;= \sqrt{\frac{\text{d}}{\text{d}t} \sigma_{min}^2\left( \frac{\sigma_{max}}{\sigma_{min}} \right)^{2t} } \\<br>&amp;= \sqrt{\sigma_{min}^2 \frac{\text{d}}{\text{d}t} \left( \frac{\sigma_{max}}{\sigma_{min}} \right)^{2t} } \tag{3.35}<br>\end{align*} $$</p>



<p>ここで\( \frac{\text{d}}{\text{d}t} \left( \frac{\sigma_{max}}{\sigma_{min}} \right)^{2t} \)の部分に注目します。以下のような指数関数の微分公式を利用します。</p>



<p>$$ \begin{align*}<br>\frac{\text{d}}{\text{d}x} a^x = a^x \log a \tag{3.36}<br>\end{align*} $$</p>



<p>(参考：<a href="https://manabitimes.jp/math/1112">https://manabitimes.jp/math/1112</a>)</p>



<p>この公式を利用すると以下のようになります。</p>



<p>$$ \begin{align*}<br>\frac{\text{d}}{\text{d}t} \left(\frac{\sigma_{max}}{\sigma_{min}} \right)^{2t} &amp;= \left( \frac{\sigma_{max}}{\sigma_{min}} \right)^{2t} \log \left(\frac{\sigma_{max}}{\sigma_{min}} \right)^2<br>\tag{3.37}<br>\end{align*} $$</p>



<p>この式(3.37)を式(3.35)に代入して式変形していくと以下のようになります。</p>



<p>$$ \begin{align*}<br>g(t) &amp;= \sqrt{\sigma_{min}^2 \frac{\text{d}}{\text{d}t} \left( \frac{\sigma_{max}}{\sigma_{min}} \right)^{2t} } \\<br>&amp;= \sqrt{\sigma_{min}^2 \left( \frac{\sigma_{max}}{\sigma_{min}} \right)^{2t} \log \left(\frac{\sigma_{max}}{\sigma_{min}} \right)^2 } \\<br>&amp;= \sigma_{min} \left( \frac{\sigma_{max}}{\sigma_{min}} \right)^{t} \sqrt{\log \left(\frac{\sigma_{max}}{\sigma_{min}} \right)^2 } \\<br>&amp;= \sigma_{min} \left( \frac{\sigma_{max}}{\sigma_{min}} \right)^{t} \sqrt{2 \log \left(\frac{\sigma_{max}}{\sigma_{min}} \right)} \tag{3.38}<br>\end{align*} $$</p>



<p>次に式(3.33)の条件付き確率のほうを式変形していきます。この式には分散のほうにだけ\(\sigma(t)\)が登場するので、この部分だけ注目します。この分散に式(3.34)の\(\sigma(t)\)を代入して式変形していくと以下のようになります。</p>



<p>$$ \begin{align} <br>\sigma(t)^2 &#8211; \sigma(0)^2 &amp;= \left[\sigma_{min}\left( \frac{\sigma_{max}}{\sigma_{min}} \right)^t \right]^2 &#8211; 0^2 \\<br>&amp;= \sigma_{min}^2\left(\frac{\sigma_{max}}{\sigma_{min}} \right)^{2t} \\ \tag{3.39}<br>\end{align} $$</p>



<p>よって式(3.33)の条件付き確率は以下のようになります。</p>



<p>$$ \begin{align} <br>p_{0t}(\boldsymbol{x}(t)|\boldsymbol{x}(0)) &amp;= \mathcal{N}(\boldsymbol{x}(0), \left[\sigma(t)^2 &#8211; \sigma(0)^2\right]\boldsymbol{I}) \\<br>&amp;= \mathcal{N}\left(\boldsymbol{x}(0), \sigma_{min}^2\left(\frac{\sigma_{max}}{\sigma_{min}} \right)^{2t}\boldsymbol{I}\right) \tag{3.40} <br>\end{align} $$</p>



<p>これらを用いてデノイジングスコアマッチングをロス関数としてスコア関数\(s_{\theta}\)を学習します。VE-SDEの場合のデノイジングスコアマッチングの関数はSBMのときと同じ形になります。具体的には以下のようになります。（変数はVE-SDEに合わせています。）</p>



<p>$$ \begin{align} <br>L(\theta) :=&amp; <br>E_t \left[ \lambda(t) E_{\boldsymbol{x}(0) \sim p_{data}(\boldsymbol{x}),\boldsymbol{x}(t) \sim p_{0t}(\boldsymbol{x}(t)|\boldsymbol{x}(0))} \left\{ \right. \right. \\ <br>&amp; \quad \left. \left. \left| \nabla_{\boldsymbol{x}(t)} \log p_{0t}(\boldsymbol{x}(t)|\boldsymbol{x}(0)) &#8211; s_{\theta}(\boldsymbol{x}(t), t) \right|^2 \right\} \right] \tag{3.41} <br>\end{align} $$</p>



<p>ここで、\(\lambda(t)\)は各\(t\)における重みづけです。</p>



<p>これを実装するために、SBMのときと同じようにスコア \( \nabla_{\boldsymbol{x}(t)} \log p_{0t}(\boldsymbol{x}(t)|\boldsymbol{x}(0)) \)の部分を式変形します。これはSBMのときと同じなので本の２章と以前私が書いたSBMの解説の記事をご覧ください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-まったり勉強ノート wp-block-embed-まったり勉強ノート"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="hky94vpgHi"><a href="https://www.mattari-benkyo-note.com/2023/03/08/diffusion_model_book_2_2/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.2 スコアベースモデル</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.2 スコアベースモデル&#8221; &#8212; まったり勉強ノート" src="https://www.mattari-benkyo-note.com/2023/03/08/diffusion_model_book_2_2/embed/#?secret=2YF8VdBkdb#?secret=hky94vpgHi" data-secret="hky94vpgHi" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p>結果として以下のようになります。</p>



<p>$$ \begin{align} <br>\nabla_{\boldsymbol{x}(t)} \log p_{0t}(\boldsymbol{x}(t)|\boldsymbol{x}(0)) &amp;=  \frac{-\epsilon}{\sigma_{min}^2\left(\frac{\sigma_{max}}{\sigma_{min}} \right)^{2t}} \tag{3.42} \\<br>\epsilon &amp;\sim \mathcal{N}\left(0, \sigma_{min}^2\left(\frac{\sigma_{max}}{\sigma_{min}} \right)^{2t}\boldsymbol{I}\right) \tag{3.43}<br>\end{align} $$</p>



<p>式(3.41)を式(3.42)、(3.43)を使って変形すると以下のようになります。（式が長すぎるので\(\boldsymbol{x}(0), \boldsymbol{x}(t), \epsilon\)の分布を省略してます。）</p>



<p>$$ \begin{align} <br>L(\theta) :=&amp; <br>E_t \left[ \lambda(t) E_{\boldsymbol{x}(0),\boldsymbol{x}(t)} \left\{ \left| \nabla_{\boldsymbol{x}(t)} \log p_{0t}(\boldsymbol{x}(t)|\boldsymbol{x}(0)) &#8211; s_{\theta}(\boldsymbol{x}(t), t) \right|^2 \right\} \right] \\<br>=&amp; E_t \left[ \lambda(t) E_{\boldsymbol{x}(0),\epsilon} \left\{ \left| \frac{-\epsilon}{\sigma_{min}^2\left(\frac{\sigma_{max}}{\sigma_{min}} \right)^{2t}} &#8211; s_{\theta}(\boldsymbol{x}(t), t) \right|^2 \right\} \right] \tag{3.44} <br>\end{align} $$</p>



<p>これをPyTorchを使ってコードにすると以下のようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="loss_ve_sed.py" data-lang="Python"><code>def sigma(t, sigma_min=sigma_min, sigma_max=sigma_max):
  return sigma_min * (sigma_max / sigma_min) ** t 

def ve_sde_marginal_prob_statistics(x, t, sigma_min, sigma_max):
  mean = x
  std = sigma(t=t, sigma_min=sigma_min, sigma_max=sigma_max)
  return mean, std

def ve_sde_drift(t, sigma_min, sigma_max):
  drift = torch.zeros_like(t)
  return drift

def ve_sde_diffusion(t, sigma_min, sigma_max):
  std = sigma(t=t, sigma_min=sigma_min, sigma_max=sigma_max)
  diffusion = std * torch.sqrt(2 * (torch.log(sigma_max) - torch.log(sigma_min))) # (30)
  return diffusion

def dsm_loss(score_model, samples, sigma_min, sigma_max):
  eps = 1.0e-8
  t = torch.distributions.uniform.Uniform(torch.tensor([eps], device=samples.device), torch.tensor([1], device=samples.device)).sample([samples.shape[0]]) 
  z = torch.randn_like(samples)
  mean, std = ve_sde_marginal_prob_statistics(x=samples, t=t, sigma_min=sigma_min, sigma_max=sigma_max)
  noise = z * std
  perturbed_samples = mean + z * std
  scores = score_model(perturbed_samples, t)
  target = - 1 / (std ** 2) * noise
  
  target = target.view(target.shape[0], -1)
  scores = scores.view(scores.shape[0], -1)
  g = ve_sde_diffusion(t=t, sigma_min=sigma_min, sigma_max=sigma_max)
  lmd = g ** 2
  loss = torch.sqrt(((scores - target) ** 2).sum(dim=-1)) * lmd
  return loss.mean()</code></pre></div>



<p>ここで本によると\(\lambda(t)=g(t)^2\)のときにスコアマッチングの目的関数は負の対数尤度の上限となっていることが証明できるそうです。このため、上記のコードでは\(\lambda(t)=g(t)^2\)を利用しています。</p>



<h2 class="wp-block-heading">VE-SDEのサンプリング</h2>



<p>VE-SDEのサンプリングをするためには拡散過程を逆にたどる逆算過程を知る必要があります。</p>



<p>拡散過程のSDEは式(3.1)で与えらえるとするとこの逆算過程は以下のようになります。</p>



<p>$$ \begin{align} \text{d}\boldsymbol{x} =&amp; \left\{f(\boldsymbol{x}, t) &#8211; \nabla \left[ \boldsymbol{G}(\boldsymbol{x}, t) \boldsymbol{G}(\boldsymbol{x}, t)^\text{T} \right] \right. \\<br>&amp; \quad \left. &#8211; \left[ \boldsymbol{G}(\boldsymbol{x}, t) \boldsymbol{G}(\boldsymbol{x}, t)^\text{T} \right] \nabla_{\boldsymbol{x}} \log p_t(\boldsymbol{x})\right\} \text{d}t \\<br>&amp; \quad+ \boldsymbol{G}(\boldsymbol{x}, t)\text{d}\bar{\boldsymbol{w}} \tag{3.45} \end{align} $$</p>



<p>ただし、\(\text{d}\bar{\boldsymbol{w}}\)は時刻Tから0まで客向きに辿ったときの標準ウィーナー過程です。</p>



<p>ただし、一般的に拡散もモデルで使われる確率微分方程式は式(3.2)の形だそうです。このため式(3.2)で使われている\(f(t), g(t)\)で式(3.45)を書き直すと以下のようになります。</p>



<p>$$ \begin{align} \text{d}\boldsymbol{x} =&amp; \left[f(t) &#8211; g(t)^2\nabla \log p_t(\boldsymbol{x})\right] \text{d}t + g(t)\text{d}\bar{\boldsymbol{w}} \tag{3.46} \end{align} $$</p>



<p>式(3.45)と式(3.46)の式変形の説明も本当はやろうと思ったのですが、かなり長い式変形になるのと、本の付録のほうに詳しい説明があるのでこの記事では省略します。</p>



<p>この式(3.46)に基づいて拡散モデルのサンプリングをする方法としてオイラー・丸山先生によるサンプリングが本で紹介されています。疑似コードは以下の通りです。(「拡散モデル　データ生成技術の数理」Algorithm 3.1の引用)</p>



<ol class="wp-block-list">
<li>\(\boldsymbol{x} \sim \mathcal{N}(0, \boldsymbol{I})\))</li>



<li>for \(i=T,&#8230;,1\) do</li>



<li>\(\quad \boldsymbol{z}_i \sim \mathcal{N}(0, \boldsymbol{I})\)</li>



<li>\(\quad \boldsymbol{x} :=  \boldsymbol{x}  &#8211; \left[f(t_i) &#8211; g(t_i)^2 s_{\theta}(\boldsymbol{x}, t_i)\right] \Delta t_i + g(t)\sqrt{|\Delta t_i|} \boldsymbol{z}_i \)</li>



<li>end for</li>



<li>return \(\boldsymbol{x}\)</li>
</ol>



<p>これをPyTorchで実装すると以下のようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="ve_sde_sampling" data-lang="Python"><code>def euler_maruyama_sample(n_samples, score_model, device=device, n=1000):
  with torch.no_grad():
    x = torch.randn(n_samples, 2, device=device)
    dt = torch.tensor(1.0 / n, device=x.device)
    for t in range(n, 0, -1):
      t_tensor = torch.full((n_samples, 1), t/n, device=device)
      z = torch.randn(n_samples, 2)
      f = ve_sde_drift(t_tensor, score_model.sigma_min, score_model.sigma_max)
      g = ve_sde_diffusion(t_tensor, score_model.sigma_min, score_model.sigma_max)
      g2 = g ** 2
      score = score_model(x, t_tensor)
      x = x - (f*x - g2 * score) * dt + g * torch.sqrt(dt) * z
    return x</code></pre></div>



<h2 class="wp-block-heading">コードの実行例</h2>



<p>ここでは先ほど紹介したロス関数とサンプリング関数を利用して実際にVE-SDEでスコア関数のパラメータを学習し、サンプリングした例を示します。</p>



<p>参考例として入力となる\(\boldsymbol{x}\)のサンプリングする分布の確率密度関数は以下のように平均が違うガウス分布二つの混合分布とし、サンプリングしたデータを正規化して使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="generate_dataset" data-lang="Python"><code>n_samples = int(1e6)
sigma = 0.01

dist0 = torch.distributions.MultivariateNormal(torch.tensor([-2, -2], dtype=torch.float).to(device), sigma*torch.eye(2, dtype=torch.float).to(device))
samples0 = dist0.sample(torch.Size([n_samples//2]))
    
dist1 = torch.distributions.MultivariateNormal(torch.tensor([2, 2], dtype=torch.float).to(device), sigma*torch.eye(2, dtype=torch.float).to(device))
samples1 = dist1.sample(torch.Size([n_samples//2]))
samples = torch.vstack((samples0, samples1))

mean = torch.mean(samples, dim=0)
std = torch.std(samples, dim=0)

normalized_samples = (samples - mean[None, :])/std[None, :]</code></pre></div>



<p>使用する\(\boldsymbol{x}\)を2Dのヒストグラムで可視化すると以下のようになります。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="266" height="264" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/sample_density.png" alt="sample density " class="wp-image-2091" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/sample_density.png 266w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/sample_density-150x150.png 150w" sizes="auto, (max-width: 266px) 100vw, 266px" /><figcaption class="wp-element-caption">使用するデータの可視化結果</figcaption></figure></div>


<p>次にスコア関数のモデルと学習コードです。基本的には先ほど紹介したロス関数を使ってモデルを学習形になります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="model_train_loop" data-lang="Python"><code>import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F

class ScoreModel(nn.Module):
  def __init__(self, sigma_min, sigma_max, n_channels=2):
    super(ScoreModel, self).__init__()
    self.sigma_min = sigma_min
    self.sigma_max = sigma_max
    self.model = nn.Sequential(
        nn.Linear(n_channels, 2*n_channels),
        nn.ELU(),
        nn.Linear(2*n_channels, 16*n_channels),
        nn.ELU(),
        nn.Linear(16*n_channels, 2*n_channels),
        nn.ELU(),
        nn.Linear(2*n_channels, n_channels),
    )

  def forward(self, x, t):
    y = self.model(x)
    sigma_t = sigma(t=t, sigma_min=self.sigma_min, sigma_max=self.sigma_max)
    return y/sigma_t

batch_size = 512
n_steps = 100000

dataloader = torch.utils.data.DataLoader(dataset, batch_size=512, shuffle=True, num_workers=0)
dataloader_iter = iter(dataloader)

score_model = ScoreModel(sigma_min=sigma_min, sigma_max=sigma_max).to(device)

optimizer = torch.optim.Adam(score_model.parameters())
lr_scheduler = torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr=0.001, total_steps=n_steps)

for i in range(n_steps):
  try:
    x = next(dataloader_iter)[0]
  except StopIteration:
    dataloader_iter = iter(dataloader)
    x = next(dataloader_iter)[0]
  x = x.to(device)

  optimizer.zero_grad()
  loss = dsm_loss(score_model, x, sigma_min=sigma_min, sigma_max=sigma_max)
  loss.backward()
  optimizer.step()
  lr_scheduler.step()
  if (i % 1000) == 0:
    print(f&quot;{i} steps loss:{loss}&quot;)</code></pre></div>



<p>学習が終わったら最後に以下のようにサンプリングする関数を呼び出してサンプリングします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="sampling" data-lang="Python"><code>samples_pred = euler_maruyama_sample(n_samples=100000, score_model=score_model)</code></pre></div>



<p>サンプリングされたデータの2Dのヒストグラムは以下の通りです。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="266" height="264" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/04/predicted_sample.png" alt="サンプリングデータの可視化結果" class="wp-image-2660" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/04/predicted_sample.png 266w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/04/predicted_sample-150x150.png 150w" sizes="auto, (max-width: 266px) 100vw, 266px" /><figcaption class="wp-element-caption">サンプリングデータの可視化結果</figcaption></figure></div>


<p>ほぼ元の分布と同じサンプリングが得られることが確認できました。</p>



<h2 class="wp-block-heading">終わりに</h2>



<p>今回は「<a href="https://amzn.to/3SC3LMc" target="_blank" rel="noreferrer noopener">拡散モデル　データ生成技術の数理</a>」の中で紹介されている分散発散型確率微分方程式 (VE-SDE)の部分を紹介しました。コードは先月の中旬にはできていたのですが、今回紹介する部分の式変形でぱっと見てわからないところがいくつかあり、それを調べていたらだいぶ時間がかかりました。また、説明のために必要な式の打ち込みにもかなり時間がかかってしまいました。</p>



<p>ただ、頑張ったおかげでかなりVE-SDEの部分の理解が進んだので記事にまとめてよかったです。</p>



<p>今後に関してはVP-SDEに関してもやろうと思っていますが、先に最近流行りのChatGPT, LLM, LangChainあたりに関していろいろ調べてみようと思うのでそちらの記事をいくつか書いてからになると思います。</p>



<p>この記事が他の方の役に少しでもなれば幸いです。</p>



<h2 class="wp-block-heading">参考文献</h2>



<ol class="wp-block-list">
<li><a href="https://amzn.to/405EQn0" target="_blank" rel="noopener" title="確率微分方程式　入門から応用まで">確率微分方程式　入門から応用まで</a></li>



<li>Särkkä, S., &amp; Solin, A. (2019).&nbsp;Applied Stochastic Differential Equations&nbsp;(Institute of Mathematical Statistics Textbooks). Cambridge: Cambridge University Press. doi:10.1017/9781108186735</li>



<li>Song, Y., Sohl-Dickstein, J.N., Kingma, D.P., Kumar, A., Ermon, S., &amp; Poole, B. (2020). Score-Based Generative Modeling through Stochastic Differential Equations.&nbsp;ArXiv, abs/2011.13456.</li>
</ol><p>The post <a href="https://www.mattari-benkyo-note.com/2023/04/13/diffusion_model_book_3_ve_sde/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 3.1-3.5のVE-SDE部分について</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.mattari-benkyo-note.com/2023/04/13/diffusion_model_book_3_ve_sde/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2391</post-id>	</item>
		<item>
		<title>育休前の自分に伝えたい育休の過ごし方</title>
		<link>https://www.mattari-benkyo-note.com/2023/03/21/childcare_leave/</link>
					<comments>https://www.mattari-benkyo-note.com/2023/03/21/childcare_leave/#respond</comments>
		
		<dc:creator><![CDATA[Shuji Suzuki (shu)]]></dc:creator>
		<pubDate>Mon, 20 Mar 2023 23:04:23 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[ライフスタイル]]></category>
		<category><![CDATA[育休]]></category>
		<guid isPermaLink="false">https://www.mattari-benkyo-note.com/?p=2137</guid>

					<description><![CDATA[<p>1月の頭から2月末まで育休をとってました。事前に会社のいろいろな人に育休のアドバイス（夜の二交代制など）を聞いていたおかげもあり、個人的には覚悟してたよりもすごい楽でした。 この「事前に育休に関していろいろアドバイスをも [&#8230;]</p>
<p>The post <a href="https://www.mattari-benkyo-note.com/2023/03/21/childcare_leave/">育休前の自分に伝えたい育休の過ごし方</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>1月の頭から2月末まで育休をとってました。事前に会社のいろいろな人に育休のアドバイス（夜の二交代制など）を聞いていたおかげもあり、個人的には覚悟してたよりもすごい楽でした。</p>



<p>この「事前に育休に関していろいろアドバイスをもらっておく」というのは思った以上に役立ったので、また育休を取るかもしれない自分への備忘録兼これから育休を取る方に向けて参考になれば思い、私の育休の過ごし方などのまとめを書きました。いつもよりもかなり分量が多い気がしますが、ご了承ください。</p>



<p>これから育休取るという人の参考になれば幸いです。</p>



<h2 class="wp-block-heading">そもそもなぜ育休を取るのか？</h2>



<p>今務めている会社の男性社員は結構子供が生まれると育休を取るという人が多い印象です。上司も育休取ったほうがいいということで、自分も育休はとるものと思っていました。ただ、「漠然と育休を過ごしているだけだともったいないなぁ」ということを思ってました。このため、同僚の先輩パパさんにいろいろ育休中にやっておいたほうがいいことを聞いて回り、それを受けて個人的には以下のことを頑張るつもりで育休を過ごすことにしました。</p>



<ol class="wp-block-list">
<li>妻と協力して家事、育児を行う</li>



<li>1日ワンオペで問題ないように育児スキルを磨く</li>



<li>しっかりと勉強時間を取る</li>
</ol>



<p>1は育休取ったらやる理由かと思いますが、生まれたばかりの赤ちゃんがいると時間が無限に吸われていきます。結果、一人だと赤ちゃんのお世話だけで1日終わってしまって家事が何もできない、ということが発生してしまいます。このため、赤ちゃんのお世話と家事を分担しておいて最低限度の生活を維持できるようにすることがまず育休の目標の一つ目になると思っています。</p>



<p>次に2つ目の「1日ワンオペで問題ないように育児スキルを磨く」です。これは先輩パパさんの話や本の内容、また実際に過ごしてみて、実は育休の最大理由はこれでは？と思ったものです。先ほど育児で無限に時間が吸われるとう話をしましたが、当然これは一人分の時間で、夫婦二人が同時に育休でいる場合、一人分の時間は空きます。そして家事も最近の家電を駆使すればかなり楽ができます。このため、夫婦で同レベルまで育児スキルがある状態なら、一人が子供を見て、もうひとりは家事がひと段落した昼前からずっと勉強したり、外に遊びに行ってリフレッシュするということが可能になります。このような自由な時間がある程度確保できるとメンタル的にも育児が楽になります。</p>



<p>このため、1日まるまる育児を任せられるくらい夫婦二人がそれぞれ育児スキルをあげておくというのはかなり重要なポイントかなと思っています。</p>



<p>最後に「しっかりと勉強時間を取る」です。私は仕事がら最新技術についてちゃんと知らないと仕事で困ることが多々あります。また、まとまった時間があるなら今まで勉強してこなかったことも勉強したいなぁということで、育休中はしっかり勉強時間を取って勉強するという目標を個人的に掲げて頑張っていました。</p>



<h2 class="wp-block-heading">育休をどれくらいの期間とるか？</h2>



<p>次に育休をどれくらいの期間取るかです。この育休の期間に関して誰もいい感じの答えを教えてくれなかったので私は適当に決めてしまったのですが、今思うとちゃんと考えたほうがいいポイントでした。</p>



<p>会社によっては育休は1か月しかとれないとかあるかもしれませんが、うちの会社は経営陣（かつ今の自分の上司）が育児の大変さをわかってくれる人なので、たぶん、言えば結構長い期間育休取れた気がします。ただ、私は何も考えずに他の先輩パパさんが2か月くらいとっていたので、「自分も2か月とります」みたいに言ってしまいました。</p>



<p>これに関して後から本などを読んで勉強して失敗したと思ったので、もし仮に育休を長くとれる場合、今の私なら育休期間を検討する材料として何を考慮するか？を以下にまとめます。</p>



<ol class="wp-block-list">
<li>保育園はいつ入れるか？</li>



<li>子供の夜のお世話の負担がどこまで減ったタイミングで育休を終わりにするか？</li>
</ol>



<p>まず、保育園に関してです。当然ですが、育休で休んだままだと保育園に入れることができないケースが存在します。このため、保育園にいつ入れたいか？が決まっている人（たとえば枠が多い4月に入れたいとか）であれば、育休は4月付近までになります。ここは地域にルールがあるかもしれないので自分の地域はどうかを予め確認し、いつ保育園にいれるのかを夫婦で相談したほうが良いかと思います。</p>



<p>次に夜のお世話に関してです。赤ちゃんは生まれたばかりは3時間おきにミルクをあげる必要があります。このため、生まれたばかりは夜に一人体制だと何回も夜に起きる必要があってかなりしんどいです。1度やればわかると思いますが、つら過ぎて二度とやるか！って気分になります。成長すると赤ちゃんが連続して寝る時間は増えていくので、ある程度成長すると夜の負担も減っていきます。個人的にはこの夜の負担がある程度減ったあと以降に育休が終わると良いと思います。</p>



<p>月齢がどれくらいだと夜に何回起きるのかは後ほど紹介する「<a href="https://amzn.to/3YsCKvM" target="_blank" rel="noopener" title="ベネッセ・ムック 最新！初めての育児新百科">ベネッセ・ムック 最新！初めての育児新百科</a>」や「<a href="https://amzn.to/3mh3h1F" target="_blank" rel="noopener" title="赤ちゃんにもママにも優しい安眠ガイド">赤ちゃんにもママにも優しい安眠ガイド</a>」に書いてあるので育休をどれくらい取るかを考えるうえで参考にするとよいと思います。</p>



<h2 class="wp-block-heading">基本的な１日のスケジュール</h2>



<p>次に実際の1日の大まかなスケジュールに関してです。ただ、この部分はどういう家庭なのかで話が大分変るのでまずは基本情報について説明していきます。</p>



<h3 class="wp-block-heading">基本的な１日のスケジュールを考えるうえで重要そうな基本情報</h3>



<p>先ほど述べたように我が家の家族構成やどういう家庭の方針、どういう性格の子供かで話が全然違うと思われる方がいると思ったので、ここで基本情報をまとめて説明します。</p>



<ol class="wp-block-list">
<li>子供は一人目</li>



<li>妻は育休で1年お休み（つまり私が育休中は二人体制）</li>



<li>生まれてから１か月は里帰り、２か月目から3か月を少し過ぎたところまで育休</li>



<li>引き続き妻が育休をとるため保育園はもう少し先</li>



<li>母乳主体でミルクの混合で育てる (主に育児分担のため)</li>



<li>子供はお腹が空いたときと眠い時以外はあまり泣かないので手がかからないほうらしい</li>
</ol>



<p>まずは今回生まれた子供が一人目です。また、妻のほうは私が取る1か月前から育休を取っていて、妻は育休を1年取る予定なので、私が育休中のタイミングは二人体制になっていました。</p>



<p>そして、私の育休を取り始めたタイミングですが、妻が里帰り出産ということもあり、最初の1か月は妻は実家にいて、その後月齢で1か月になったあたり（年末年始の休みの最初）で帰ってきました。そして、このタイミングで育休をスタートさせて、2月末まで取ってました。このため、生まれたばかりの方は少し変えたほうがいい部分があるかもしれないので注意してください。</p>



<p>また、できるだけ長く子供と一緒にいる時間を作りたいという妻の意見で、保育園は少し先にすることにしました。このため、保活に必要な時間はスケジュールに含まれていません。</p>



<p>そして、ミルクに関してですが、これも妻の意見でなるべく母乳主体で育てつつ、私もごはんがあげられるようにということで母乳とミルクの混合で育てることにしました。このあと話す育児の分担では混合、もしくはミルクだけじゃないと参考にならない部分があると思いますので注意してください。</p>



<p>また、どういう性格の子供か？ですが、これに関して私が他の赤ちゃんを知らないので、妻のお姉さんや会社の同僚に話を聞いた感想を基に判断すると、どうやら手がかからないタイプの子供らしいです。育休のころは大体決まったタイミングで泣くので過去の状況から簡単に泣いている理由が判断できて、精神的に楽でした。</p>



<h3 class="wp-block-heading">夜の二交代制による楽な1日の過ごし方</h3>



<p>ここから育休中に重要だった1日の過ごし方について詳しく説明します。基本的には以下のような過ごし方をしていました。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="481" height="385" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/schedule-4.png" alt="1日のスケジュール" class="wp-image-2310" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/schedule-4.png 481w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/schedule-4-300x240.png 300w" sizes="auto, (max-width: 481px) 100vw, 481px" /><figcaption class="wp-element-caption">1日の大まかなスケジュール</figcaption></figure></div>


<p>子供が寝ている夜の時間（19時から次の日の6時）に対処するために我が家では、19時から3時と3時から11時の二つに分けて、一人が就寝、一人が家事と育児もしくは暇なら自由時間という形にしていました。夜を完全に分担することで夜は必ず連続で8時間寝れるという状況にしていました。ちなみにこの夜の二交代制は先輩パパさんたちが口をそろえてよかったというので我が家も導入しました。</p>



<p>この夜の二交代制の懸念事項は夜は一人体制になるので二人とも十分な育児スキルがないと任せられない、寝る時間と起きる時間が変な時間になるので抵抗があるということが考えられます。私の場合は育児スキルのほうは最初は妻に見てもらいながら練習をすることでなんとかしました。また、寝る時間と起きる時間が変な時間になるという部分は海外に行ったらもっとひどい状態になるので、それよりまし！と思ってぐっとこらえてました。</p>



<p>この夜の二交代制のメリットは睡眠時間がちゃんと確保できる以外にもあります。例えば、夜の育児に関しては最初のうちは3時間おきにミルクをあげる以外はかなり自由にできます。私は二人目の夜の担当だったので3時から11時が担当でした。このため、赤ちゃんが起きなければ3時から6時までの間は集中して勉強する時間に充てることができました。</p>



<p>また睡眠時間がちゃんと確保できているので、昼間も勉強する気力が十分あります。このため、昼間に関しては赤ちゃんを抱っこしながらでも「聞くこと」と「しゃべること」はできるので、これを機に今までやってなかったスピーキングの練習（<a href="https://elsaspeak.com/ja/" target="_blank" rel="noopener" title="ELSA Speak">ELSA Speak</a>を利用）をやっていました。それ以外に家事を終えて暇な時間は論文や教科書を読むなどの読書によって勉強してました。</p>



<p>このため、1日で集中して勉強できる時間は2時間から3時間、スピーキングは1時間、読書は1,2時間くらいで合計で4~6時間という感じでした。結果として人生で久々にたくさん勉強することができたという感じがしています。</p>



<h2 class="wp-block-heading">工夫した点や意識した点</h2>



<p>ここではいくつか育休中の過ごし方で工夫したり意識したりした点について順番に紹介します。</p>



<h3 class="wp-block-heading">育児の記録アプリを使う</h3>



<p>まず最初の一つ目は育児アプリの使用です。我が家では妻の提案で育児記録アプリの「<a href="http://www.piyolog.com/" target="_blank" rel="noreferrer noopener">ぴよログ</a>」を使っていました。</p>



<p>このおかげで夜に交代した際、「次に何時にミルクをあげるべきか？」などの引継ぎ作業がいらなくなり、すぐさま交代することができます。</p>



<p>また、育児の最中一番つらかったのが「なんで赤ちゃんが泣いているのかわからなくて対処できない時」でした。これに関しては育児記録があれば、泣いている時間いつもは寝てるのかやミルクを飲むのかなどの傾向を調べることができ、対処がしやすかったです。</p>



<p>ちなみに、ぴよログはカスタムのイベントをいくつか登録できるのですが、我が家では「ぐずった」というイベントを作って、泣いたタイミングとその後何をしたかが分かるようにしておいて、泣いたタイミングで何をしたほうがよさそうか？をわかるようにしてあります。</p>



<h3 class="wp-block-heading">生活リズムを赤ちゃんを中心に考え直して毎日そろえる</h3>



<p>二つ目は生活リズムに関してです。我が家では生活リズムをそろえることを意識して生活してました。スケジュールを毎日そろえる利点としては家事はもちろん、育児に関しても赤ちゃんの泣くタイミングが同じになり、仕事がルーティーン化でき、例外的な予定（友達と遊びに行くなど）が立てやすくなります。</p>



<p>どういうスケジュールがいいかに関しては後ほど紹介する「<a href="https://amzn.to/3mh3h1F" target="_blank" rel="noreferrer noopener">赤ちゃんにもママにも優しい安眠ガイド</a>」という本を参考にしつつ、育児アプリの記録を見て夫婦で相談し、赤ちゃんにとっても夫婦にとっても無理のないスケジュールを立てるようにしていました（大まかな1日のスケジュールは「夜の二交代制による楽な1日の過ごし方」参照）。また、赤ちゃんの成長とともに赤ちゃんの生活リズムが変化してないかや、1度立てたスケジュールに無理がないかを定期的に確認するようにもしていました。</p>



<h3 class="wp-block-heading">部屋のレイアウトを赤ちゃん中心に変える</h3>



<p>3つ目は次に部屋のレイアウトです。我が家は1LDKなのですが、どこで赤ちゃんを生活させるか？は結構もめました。結果としては「夜に寝ている人がいる部屋に入らなくて済むように赤ちゃんのために使用する部屋を1つにまとめる」という考えのもとLDK部分に赤ちゃんがずっといるようにし、一部屋は寝室にしていました。</p>



<p>これにより、寝ている人が物音や部屋の明かりで起きるようなことがないようにし、快適に過ごすことができました。</p>



<h3 class="wp-block-heading">できる限り日々のやることを細かく書きだして、妻と自分、どちらがやっても同じようにできるようにする</h3>



<p>4つ目は日々のタスクに関してです。我が家では日々の家事と育児を細かく書きだして妻と自分、どちらがやっても同じようにできるようにしました。例えば、最初は「赤ちゃんのお風呂の準備」を夕飯前の準備前あたりでやるという風になっていました。ただ、お風呂の準備と聞いて私は何を用意するべきなのか？が最初イメージできませんでした。これでは「赤ちゃんのお風呂の準備」というタスクを取り組むのが妻が担当するか、私が担当するかで準備の内容が変わってしまいます。このため、単に「赤ちゃんのお風呂の準備」ではなく、「着替え、おむつ、タオルの準備」のように細かく書き下して、妻と私で日々のやることリストを共有していました。</p>



<p>この結果、どちらがやっても同じようになるため、家事と育児の分担がかなり柔軟に行うことができるようになります。また、1日ワンオペの日も何をやればいいかは書きだしてあるので、妻に確認しなくても普段通り過ごすことができます。このあたりのやることを書きだすというのは仕事のときと同じかなと思っています。</p>



<h3 class="wp-block-heading">育休中できるだけすぐに1日ワンオペできるようにする</h3>



<p>5つ目はワンオペに関してです。最初に述べたように「1日ワンオペ」は育休中の目標にしていました。このため、最初の1週間は妻に教えてもらいながら育児（特にお風呂の入れ方）を練習していました。このおかげで妻も安心して昼間出かけることができるようになり、ストレス発散ができるようになったということを言っています。</p>



<p>また、妻が昼間でかけたら自分も出かけたいということが言いやすくなるため、自分が快適に過ごすためにも重要だったと思っています。このおかげで気兼ねなく妻は月に何度か友達と外でランチや飲み会にいけたり、私も趣味のカフェ巡りやライブにいくことができました。</p>



<h3 class="wp-block-heading">赤ちゃんがいる状態で何ができるか？を思いつくものは片っ端から確認する</h3>



<p>6つ目は育休後を意識して赤ちゃんがいる状態で何ができるのかの確認に関してです。具体的には電車やバスに乗るとどうなるのかなどの確認です。私が育休中であれば二人で対応ができるため問題があったとしても対処することが可能なことが多い印象です。一方、私の育休後は妻が一人でやらなければならない可能性がでてきます。そういうときを意識して、これは一人でできそうか？などを確認していました。</p>



<p>この結果、例えばベビーカーでバスに一人で乗るのは大変そうだとかがわかりました。このようなことが事前にわかればベビーカーを使ってバスは乗らないようにするなど予定を立てる段階で役に立つと思っています。</p>



<h3 class="wp-block-heading">育休ラスト約2週間前でに夜の二交代制をやめて問題ないか確認する</h3>



<p>7つ目は育休後を意識した生活に関してです。育休明けが近づいてきた段階で夜の二交代制はやめて夜は二人とも同時に寝るように変更して問題がなさそうかを確認しました。夜の二交代制は8時間睡眠時間が必ず確保できる一方、仕事をするとなると実行するのは時間的に難しいです。このため、私の育休が明けるタイミングでは夜の二交代制をやめる必要があります。ただ、育休が明けたタイミングで突然やめると何か問題があったときに対処が難しいということで2週間前から夜の二交代制をやめて二人とも21時から次の日の5時か6時に起きるという生活を試し始めました。</p>



<p>ちなみにわが子はたまたまですが、すでに連続で5時間から長いときは8時間寝るようになっていたため、二交代制をやめても起きる回数は多くて1回くらいという状態になっていました。</p>



<p>ただ、いざ二交代制をやめても、当初は妻は赤ちゃんが布団を蹴り飛ばして寒そうにしていないか心配で何度も起きてしまうという話をしていた。このため「スリーパー」を購入したりして、心配事を潰していってできるだけ安心して眠れるように改善を繰り返すようにしていました。結局、ちょうど2週間くらいは睡眠不足でつらいという日々が続いたので、前もって夜の二交代制をやめた生活を試し始めてよかった印象です。</p>



<h2 class="wp-block-heading">買ってよかったもの</h2>



<p>ここでは育休中に買っておいて本当によかったというものをまとめて紹介しておきます。</p>


		<div class="pochipp-box"
			data-id="2953"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="8114e606"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%25AB%25E3%2583%25B3%25E3%2583%2590%2520j7&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%25AB%25E3%2583%25B3%25E3%2583%2590%2520j7" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/biccamera/cabinet/product/6917/00000009911455_a01.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%25AB%25E3%2583%25B3%25E3%2583%2590%2520j7&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%25AB%25E3%2583%25B3%25E3%2583%2590%2520j7" rel="nofollow noopener" target="_blank">
						ルンバ j7					</a>
				</div>

				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=%E3%83%AB%E3%83%B3%E3%83%90%20j7&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%25AB%25E3%2583%25B3%25E3%2583%2590%2520j7&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%25AB%25E3%2583%25B3%25E3%2583%2590%2520j7" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：細かいところまでは掃除してくれないが部屋が7，8割くらいきれいになるので、平日の掃除にはちょうどいい</p>


		<div class="pochipp-box"
			data-id="2955"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="84559543"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%25E3%2580%2580%25E3%2581%25AA%25E3%2581%25AA%25E3%2582%2581%25E3%2583%2589%25E3%2583%25A9%25E3%2583%25A0%25E6%25B4%2597%25E6%25BF%25AF%25E4%25B9%25BE%25E7%2587%25A5%25E6%25A9%259F%2520NA-VG760L&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%25E3%2580%2580%25E3%2581%25AA%25E3%2581%25AA%25E3%2582%2581%25E3%2583%2589%25E3%2583%25A9%25E3%2583%25A0%25E6%25B4%2597%25E6%25BF%25AF%25E4%25B9%25BE%25E7%2587%25A5%25E6%25A9%259F%2520NA-VG760L" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/mujica-felice/cabinet/audio-1/b09hgs5z6d.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%25E3%2580%2580%25E3%2581%25AA%25E3%2581%25AA%25E3%2582%2581%25E3%2583%2589%25E3%2583%25A9%25E3%2583%25A0%25E6%25B4%2597%25E6%25BF%25AF%25E4%25B9%25BE%25E7%2587%25A5%25E6%25A9%259F%2520NA-VG760L&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%25E3%2580%2580%25E3%2581%25AA%25E3%2581%25AA%25E3%2582%2581%25E3%2583%2589%25E3%2583%25A9%25E3%2583%25A0%25E6%25B4%2597%25E6%25BF%25AF%25E4%25B9%25BE%25E7%2587%25A5%25E6%25A9%259F%2520NA-VG760L" rel="nofollow noopener" target="_blank">
						パナソニック　ななめドラム洗濯乾燥機 NA-VG760L					</a>
				</div>

				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=%E3%83%91%E3%83%8A%E3%82%BD%E3%83%8B%E3%83%83%E3%82%AF%E3%80%80%E3%81%AA%E3%81%AA%E3%82%81%E3%83%89%E3%83%A9%E3%83%A0%E6%B4%97%E6%BF%AF%E4%B9%BE%E7%87%A5%E6%A9%9F%20NA-VG760L&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%25E3%2580%2580%25E3%2581%25AA%25E3%2581%25AA%25E3%2582%2581%25E3%2583%2589%25E3%2583%25A9%25E3%2583%25A0%25E6%25B4%2597%25E6%25BF%25AF%25E4%25B9%25BE%25E7%2587%25A5%25E6%25A9%259F%2520NA-VG760L&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%25E3%2580%2580%25E3%2581%25AA%25E3%2581%25AA%25E3%2582%2581%25E3%2583%2589%25E3%2583%25A9%25E3%2583%25A0%25E6%25B4%2597%25E6%25BF%25AF%25E4%25B9%25BE%25E7%2587%25A5%25E6%25A9%259F%2520NA-VG760L" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：乾燥機のおかげで干す必要がないのですごい洗濯が楽</p>


		<div class="pochipp-box"
			data-id="2956"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="86437697"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fnicebaby%2Fh148658%2F%3Frafcid%3Dwsc_i_is_1074984852215714305&#038;m=https%3A%2F%2Fitem.rakuten.co.jp%2Fnicebaby%2Fh148658%2F%3Frafcid%3Dwsc_i_is_1074984852215714305" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/nicebaby/cabinet/combi/192187.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fnicebaby%2Fh148658%2F%3Frafcid%3Dwsc_i_is_1074984852215714305&#038;m=https%3A%2F%2Fitem.rakuten.co.jp%2Fnicebaby%2Fh148658%2F%3Frafcid%3Dwsc_i_is_1074984852215714305" rel="nofollow noopener" target="_blank">
						コンビ 電子レンジ除菌&#038;保管ケース 除菌じょ~ずα バニラ					</a>
				</div>

				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=%E3%82%B3%E3%83%B3%E3%83%93%20%E9%9B%BB%E5%AD%90%E3%83%AC%E3%83%B3%E3%82%B8%E9%99%A4%E8%8F%8C&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fitem.rakuten.co.jp%2Fnicebaby%2Fh148658%2F%3Frafcid%3Dwsc_i_is_1074984852215714305&#038;m=https%3A%2F%2Fitem.rakuten.co.jp%2Fnicebaby%2Fh148658%2F%3Frafcid%3Dwsc_i_is_1074984852215714305" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：哺乳瓶を3本くらいまとめて電子レンジで消毒できるので消毒が楽</p>


		<div class="pochipp-box"
			data-id="2957"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="dbffd91c"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2587%25E3%2582%25A3%25E3%2582%25BA%25E3%2583%258B%25E3%2583%25BC%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2583%2588%25E3%2582%25A4%2520%25E3%2581%258F%25E3%2581%25BE%25E3%2581%25AE%25E3%2583%2597%25E3%2583%25BC%25E3%2581%2595%25E3%2582%2593%2520%25E3%2581%2588%25E3%2582%2589%25E3%2581%25B9%25E3%2582%258B%25E5%259B%259E%25E8%25BB%25A2%25206WAY%25E3%2582%25B8%25E3%2583%25A0%25E3%2581%25AB%25E3%2581%25B8%25E3%2582%2593%25E3%2581%2597%25E3%2582%2593%25E3%2583%25A1%25E3%2583%25AA%25E3%2583%25BC&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2587%25E3%2582%25A3%25E3%2582%25BA%25E3%2583%258B%25E3%2583%25BC%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2583%2588%25E3%2582%25A4%2520%25E3%2581%258F%25E3%2581%25BE%25E3%2581%25AE%25E3%2583%2597%25E3%2583%25BC%25E3%2581%2595%25E3%2582%2593%2520%25E3%2581%2588%25E3%2582%2589%25E3%2581%25B9%25E3%2582%258B%25E5%259B%259E%25E8%25BB%25A2%25206WAY%25E3%2582%25B8%25E3%2583%25A0%25E3%2581%25AB%25E3%2581%25B8%25E3%2582%2593%25E3%2581%2597%25E3%2582%2593%25E3%2583%25A1%25E3%2583%25AA%25E3%2583%25BC" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/nicebaby/cabinet/takatatomy/6waygym_01.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2587%25E3%2582%25A3%25E3%2582%25BA%25E3%2583%258B%25E3%2583%25BC%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2583%2588%25E3%2582%25A4%2520%25E3%2581%258F%25E3%2581%25BE%25E3%2581%25AE%25E3%2583%2597%25E3%2583%25BC%25E3%2581%2595%25E3%2582%2593%2520%25E3%2581%2588%25E3%2582%2589%25E3%2581%25B9%25E3%2582%258B%25E5%259B%259E%25E8%25BB%25A2%25206WAY%25E3%2582%25B8%25E3%2583%25A0%25E3%2581%25AB%25E3%2581%25B8%25E3%2582%2593%25E3%2581%2597%25E3%2582%2593%25E3%2583%25A1%25E3%2583%25AA%25E3%2583%25BC&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2587%25E3%2582%25A3%25E3%2582%25BA%25E3%2583%258B%25E3%2583%25BC%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2583%2588%25E3%2582%25A4%2520%25E3%2581%258F%25E3%2581%25BE%25E3%2581%25AE%25E3%2583%2597%25E3%2583%25BC%25E3%2581%2595%25E3%2582%2593%2520%25E3%2581%2588%25E3%2582%2589%25E3%2581%25B9%25E3%2582%258B%25E5%259B%259E%25E8%25BB%25A2%25206WAY%25E3%2582%25B8%25E3%2583%25A0%25E3%2581%25AB%25E3%2581%25B8%25E3%2582%2593%25E3%2581%2597%25E3%2582%2593%25E3%2583%25A1%25E3%2583%25AA%25E3%2583%25BC" rel="nofollow noopener" target="_blank">
						ディズニー ベビートイ くまのプーさん えらべる回転 6WAYジムにへんしんメリー					</a>
				</div>

				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=%E3%83%87%E3%82%A3%E3%82%BA%E3%83%8B%E3%83%BC%20%E3%83%99%E3%83%93%E3%83%BC%E3%83%88%E3%82%A4%20%E3%81%8F%E3%81%BE%E3%81%AE%E3%83%97%E3%83%BC%E3%81%95%E3%82%93%20%E3%81%88%E3%82%89%E3%81%B9%E3%82%8B%E5%9B%9E%E8%BB%A2%206WAY%E3%82%B8%E3%83%A0%E3%81%AB%E3%81%B8%E3%82%93%E3%81%97%E3%82%93%E3%83%A1%E3%83%AA%E3%83%BC&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2587%25E3%2582%25A3%25E3%2582%25BA%25E3%2583%258B%25E3%2583%25BC%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2583%2588%25E3%2582%25A4%2520%25E3%2581%258F%25E3%2581%25BE%25E3%2581%25AE%25E3%2583%2597%25E3%2583%25BC%25E3%2581%2595%25E3%2582%2593%2520%25E3%2581%2588%25E3%2582%2589%25E3%2581%25B9%25E3%2582%258B%25E5%259B%259E%25E8%25BB%25A2%25206WAY%25E3%2582%25B8%25E3%2583%25A0%25E3%2581%25AB%25E3%2581%25B8%25E3%2582%2593%25E3%2581%2597%25E3%2582%2593%25E3%2583%25A1%25E3%2583%25AA%25E3%2583%25BC&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2587%25E3%2582%25A3%25E3%2582%25BA%25E3%2583%258B%25E3%2583%25BC%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2583%2588%25E3%2582%25A4%2520%25E3%2581%258F%25E3%2581%25BE%25E3%2581%25AE%25E3%2583%2597%25E3%2583%25BC%25E3%2581%2595%25E3%2582%2593%2520%25E3%2581%2588%25E3%2582%2589%25E3%2581%25B9%25E3%2582%258B%25E5%259B%259E%25E8%25BB%25A2%25206WAY%25E3%2582%25B8%25E3%2583%25A0%25E3%2581%25AB%25E3%2581%25B8%25E3%2582%2593%25E3%2581%2597%25E3%2582%2593%25E3%2583%25A1%25E3%2583%25AA%25E3%2583%25BC" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：ごはんを食べたいときなど30分程度の時間を子供から手を放したいときすごく重宝する</p>


		<div class="pochipp-box"
			data-id="2958"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="6a009f9b"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%2520KX-HBC200-W%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2582%25AB%25E3%2583%25A1%25E3%2583%25A9&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%2520KX-HBC200-W%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2582%25AB%25E3%2583%25A1%25E3%2583%25A9" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/yamada-denki/cabinet/a07000076/4472802018.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%2520KX-HBC200-W%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2582%25AB%25E3%2583%25A1%25E3%2583%25A9&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%2520KX-HBC200-W%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2582%25AB%25E3%2583%25A1%25E3%2583%25A9" rel="nofollow noopener" target="_blank">
						パナソニック KX-HBC200-W ベビーカメラ ホワイト KXHBC200					</a>
				</div>

				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=%E3%83%91%E3%83%8A%E3%82%BD%E3%83%8B%E3%83%83%E3%82%AF%20KX-HBC200-W%20%E3%83%99%E3%83%93%E3%83%BC%E3%82%AB%E3%83%A1%E3%83%A9&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%2520KX-HBC200-W%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2582%25AB%25E3%2583%25A1%25E3%2583%25A9&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2591%25E3%2583%258A%25E3%2582%25BD%25E3%2583%258B%25E3%2583%2583%25E3%2582%25AF%2520KX-HBC200-W%2520%25E3%2583%2599%25E3%2583%2593%25E3%2583%25BC%25E3%2582%25AB%25E3%2583%25A1%25E3%2583%25A9" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：別の部屋や視覚的に見えない位置に赤ちゃんがいるときでもスマホで様子が確認できるので安心</p>


		<div class="pochipp-box"
			data-id="2959"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="68746ac3"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E4%25B8%25B9%25E5%25B9%25B3%25E8%25A3%25BD%25E8%2596%25AC%2520%25E3%2583%259E%25E3%2583%259E%25E9%25BC%25BB%25E6%25B0%25B4%25E3%2583%2588%25E3%2583%2583%25E3%2583%2586&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E4%25B8%25B9%25E5%25B9%25B3%25E8%25A3%25BD%25E8%2596%25AC%2520%25E3%2583%259E%25E3%2583%259E%25E9%25BC%25BB%25E6%25B0%25B4%25E3%2583%2588%25E3%2583%2583%25E3%2583%2586" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/kusurinofukutaro/cabinet/shouhin47/4987133014806.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E4%25B8%25B9%25E5%25B9%25B3%25E8%25A3%25BD%25E8%2596%25AC%2520%25E3%2583%259E%25E3%2583%259E%25E9%25BC%25BB%25E6%25B0%25B4%25E3%2583%2588%25E3%2583%2583%25E3%2583%2586&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E4%25B8%25B9%25E5%25B9%25B3%25E8%25A3%25BD%25E8%2596%25AC%2520%25E3%2583%259E%25E3%2583%259E%25E9%25BC%25BB%25E6%25B0%25B4%25E3%2583%2588%25E3%2583%2583%25E3%2583%2586" rel="nofollow noopener" target="_blank">
						丹平製薬 ママ鼻水トッテ					</a>
				</div>

				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=%E4%B8%B9%E5%B9%B3%E8%A3%BD%E8%96%AC%20%E3%83%9E%E3%83%9E%E9%BC%BB%E6%B0%B4%E3%83%88%E3%83%83%E3%83%86&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E4%25B8%25B9%25E5%25B9%25B3%25E8%25A3%25BD%25E8%2596%25AC%2520%25E3%2583%259E%25E3%2583%259E%25E9%25BC%25BB%25E6%25B0%25B4%25E3%2583%2588%25E3%2583%2583%25E3%2583%2586&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E4%25B8%25B9%25E5%25B9%25B3%25E8%25A3%25BD%25E8%2596%25AC%2520%25E3%2583%259E%25E3%2583%259E%25E9%25BC%25BB%25E6%25B0%25B4%25E3%2583%2588%25E3%2583%2583%25E3%2583%2586" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：電動のものと違ってうるさくないので、夜に鼻を詰まらせて泣いているとき、さっと取り出せて使えるので便利</p>


		<div class="pochipp-box"
			data-id="2961"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="4d0779d8"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%25B0%25B4%25E3%2581%25A0%25E3%2581%2591%25E3%2581%25AC%25E3%2582%258C%25E3%2582%25B3%25E3%2583%2583%25E3%2583%2588%25E3%2583%25B3&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%25B0%25B4%25E3%2581%25A0%25E3%2581%2591%25E3%2581%25AC%25E3%2582%258C%25E3%2582%25B3%25E3%2583%2583%25E3%2583%2588%25E3%2583%25B3" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/sundrug/cabinet/60/4904820020940.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%25B0%25B4%25E3%2581%25A0%25E3%2581%2591%25E3%2581%25AC%25E3%2582%258C%25E3%2582%25B3%25E3%2583%2583%25E3%2583%2588%25E3%2583%25B3&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%25B0%25B4%25E3%2581%25A0%25E3%2581%2591%25E3%2581%25AC%25E3%2582%258C%25E3%2582%25B3%25E3%2583%2583%25E3%2583%2588%25E3%2583%25B3" rel="nofollow noopener" target="_blank">
						アメジスト ママとベビーの水だけぬれコットン					</a>
				</div>

				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=%E6%B0%B4%E3%81%A0%E3%81%91%E3%81%AC%E3%82%8C%E3%82%B3%E3%83%83%E3%83%88%E3%83%B3&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%25B0%25B4%25E3%2581%25A0%25E3%2581%2591%25E3%2581%25AC%25E3%2582%258C%25E3%2582%25B3%25E3%2583%2583%25E3%2583%2588%25E3%2583%25B3&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%25B0%25B4%25E3%2581%25A0%25E3%2581%2591%25E3%2581%25AC%25E3%2582%258C%25E3%2582%25B3%25E3%2583%2583%25E3%2583%2588%25E3%2583%25B3" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：目ヤニがよくついているのでさっと取りたいときに便利</p>


		<div class="pochipp-box"
			data-id="2962"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="992da4e4"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fedela%2528%25E3%2583%25A1%25E3%2583%2587%25E3%2583%25A9%2529%2520%25E4%25B9%25B3%25E9%25A0%25AD%25E3%2582%25B1%25E3%2582%25A2%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25A0&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fedela%2528%25E3%2583%25A1%25E3%2583%2587%25E3%2583%25A9%2529%2520%25E4%25B9%25B3%25E9%25A0%25AD%25E3%2582%25B1%25E3%2582%25A2%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25A0" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/online-sshop/cabinet/340/imgrc00717910071.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fedela%2528%25E3%2583%25A1%25E3%2583%2587%25E3%2583%25A9%2529%2520%25E4%25B9%25B3%25E9%25A0%25AD%25E3%2582%25B1%25E3%2582%25A2%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25A0&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fedela%2528%25E3%2583%25A1%25E3%2583%2587%25E3%2583%25A9%2529%2520%25E4%25B9%25B3%25E9%25A0%25AD%25E3%2582%25B1%25E3%2582%25A2%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25A0" rel="nofollow noopener" target="_blank">
						Medela (メデラ)　ピュアレーン 7g					</a>
				</div>

				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=edela%28%E3%83%A1%E3%83%87%E3%83%A9%29%20%E4%B9%B3%E9%A0%AD%E3%82%B1%E3%82%A2%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%A0&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fedela%2528%25E3%2583%25A1%25E3%2583%2587%25E3%2583%25A9%2529%2520%25E4%25B9%25B3%25E9%25A0%25AD%25E3%2582%25B1%25E3%2582%25A2%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25A0&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2Fedela%2528%25E3%2583%25A1%25E3%2583%2587%25E3%2583%25A9%2529%2520%25E4%25B9%25B3%25E9%25A0%25AD%25E3%2582%25B1%25E3%2582%25A2%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25A0" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：妻曰く、母乳で育てるなら絶対必要らしい</p>



<p>他にも便利だったものを以下の表にまとめておきます。</p>



<figure class="wp-block-table"><table><tbody><tr><td>商品</td><td>よかった理由</td></tr><tr><td>おむつ交換シート</td><td>お出かけしたときにおむつ交換台がきれいじゃなさそうなときでも安心</td></tr><tr><td>おむつストッカー</td><td>おむつだけでなく、ガーゼやおしりふきなど赤ちゃん用の小物をまとめて置けるので便利</td></tr><tr><td>ベビーカー</td><td>あるとお出かけが楽</td></tr><tr><td>抱っこひも</td><td>近所でベビーカーで行きづらいお店に買い物にいくときなど便利</td></tr></tbody></table><figcaption class="wp-element-caption">その他の買ってよかったものまとめ</figcaption></figure>



<p>といった感じでした。特に「<a href="https://amzn.to/3EUrQb5" target="_blank" rel="noopener" title="ディズニー ベビートイ くまのプーさん えらべる回転 6WAYジムにへんしんメリー">ディズニー ベビートイ くまのプーさん えらべる回転 6WAYジムにへんしんメリー</a>」は個人的には半信半疑で買いましたが、30分程度とはいえ赤ちゃんが泣かない時間を親が任意に作れるのですごい重宝しました。</p>



<h2 class="wp-block-heading">読んで良かった本</h2>



<p>最後に育休を取るにあたり、何冊か本を読んで読みました。ここではその中でも個人的によかったと思う本をよかった順にまとめて紹介します。</p>


		<div class="pochipp-box"
			data-id="2946"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="2eddaf2b"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2599%25E3%2583%258D%25E3%2583%2583%25E3%2582%25BB%25E3%2583%25BB%25E3%2583%25A0%25E3%2583%2583%25E3%2582%25AF%2520%25E6%259C%2580%25E6%2596%25B0%25EF%25BC%2581%25E5%2588%259D%25E3%2582%2581%25E3%2581%25A6%25E3%2581%25AE%25E8%2582%25B2%25E5%2585%2590%25E6%2596%25B0%25E7%2599%25BE%25E7%25A7%2591&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2599%25E3%2583%258D%25E3%2583%2583%25E3%2582%25BB%25E3%2583%25BB%25E3%2583%25A0%25E3%2583%2583%25E3%2582%25AF%2520%25E6%259C%2580%25E6%2596%25B0%25EF%25BC%2581%25E5%2588%259D%25E3%2582%2581%25E3%2581%25A6%25E3%2581%25AE%25E8%2582%25B2%25E5%2585%2590%25E6%2596%25B0%25E7%2599%25BE%25E7%25A7%2591" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1677/9784828871677.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2599%25E3%2583%258D%25E3%2583%2583%25E3%2582%25BB%25E3%2583%25BB%25E3%2583%25A0%25E3%2583%2583%25E3%2582%25AF%2520%25E6%259C%2580%25E6%2596%25B0%25EF%25BC%2581%25E5%2588%259D%25E3%2582%2581%25E3%2581%25A6%25E3%2581%25AE%25E8%2582%25B2%25E5%2585%2590%25E6%2596%25B0%25E7%2599%25BE%25E7%25A7%2591&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2599%25E3%2583%258D%25E3%2583%2583%25E3%2582%25BB%25E3%2583%25BB%25E3%2583%25A0%25E3%2583%2583%25E3%2582%25AF%2520%25E6%259C%2580%25E6%2596%25B0%25EF%25BC%2581%25E5%2588%259D%25E3%2582%2581%25E3%2581%25A6%25E3%2581%25AE%25E8%2582%25B2%25E5%2585%2590%25E6%2596%25B0%25E7%2599%25BE%25E7%25A7%2591" rel="nofollow noopener" target="_blank">
						最新！初めての育児新百科 新生児期から3才までこれ1冊でOK！					</a>
				</div>

									<div class="pochipp-box__info">ひよこクラブ編集部</div>
				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=%E3%83%99%E3%83%8D%E3%83%83%E3%82%BB%E3%83%BB%E3%83%A0%E3%83%83%E3%82%AF%20%E6%9C%80%E6%96%B0%EF%BC%81%E5%88%9D%E3%82%81%E3%81%A6%E3%81%AE%E8%82%B2%E5%85%90%E6%96%B0%E7%99%BE%E7%A7%91&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2599%25E3%2583%258D%25E3%2583%2583%25E3%2582%25BB%25E3%2583%25BB%25E3%2583%25A0%25E3%2583%2583%25E3%2582%25AF%2520%25E6%259C%2580%25E6%2596%25B0%25EF%25BC%2581%25E5%2588%259D%25E3%2582%2581%25E3%2581%25A6%25E3%2581%25AE%25E8%2582%25B2%25E5%2585%2590%25E6%2596%25B0%25E7%2599%25BE%25E7%25A7%2591&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E3%2583%2599%25E3%2583%258D%25E3%2583%2583%25E3%2582%25BB%25E3%2583%25BB%25E3%2583%25A0%25E3%2583%2583%25E3%2582%25AF%2520%25E6%259C%2580%25E6%2596%25B0%25EF%25BC%2581%25E5%2588%259D%25E3%2582%2581%25E3%2581%25A6%25E3%2581%25AE%25E8%2582%25B2%25E5%2585%2590%25E6%2596%25B0%25E7%2599%25BE%25E7%25A7%2591" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：赤ちゃんの成長による変化やお世話の仕方、病気っぽい症状のときどうすればいいかなど幅広いことが書いてあるので困ったときに手元にあると安心</p>


		<div class="pochipp-box"
			data-id="2947"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="81ce0175"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E8%25B5%25A4%25E3%2581%25A1%25E3%2582%2583%25E3%2582%2593%25E3%2581%25AB%25E3%2582%2582%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AB%25E3%2582%2582%25E5%2584%25AA%25E3%2581%2597%25E3%2581%2584%25E5%25AE%2589%25E7%259C%25A0%25E3%2582%25AC%25E3%2582%25A4%25E3%2583%2589%25200%25E6%25AD%25B3%25E3%2581%258B%25E3%2582%2589%25E3%2581%25AE%25E3%2583%258D%25E3%2583%25B3%25E3%2583%258D%25E3%2583%2588%25E3%2583%25AC%25E3%2583%25BC%25E3%2583%258B%25E3%2583%25B3%25E3%2582%25B0&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E8%25B5%25A4%25E3%2581%25A1%25E3%2582%2583%25E3%2582%2593%25E3%2581%25AB%25E3%2582%2582%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AB%25E3%2582%2582%25E5%2584%25AA%25E3%2581%2597%25E3%2581%2584%25E5%25AE%2589%25E7%259C%25A0%25E3%2582%25AC%25E3%2582%25A4%25E3%2583%2589%25200%25E6%25AD%25B3%25E3%2581%258B%25E3%2582%2589%25E3%2581%25AE%25E3%2583%258D%25E3%2583%25B3%25E3%2583%258D%25E3%2583%2588%25E3%2583%25AC%25E3%2583%25BC%25E3%2583%258B%25E3%2583%25B3%25E3%2582%25B0" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/7971/9784761267971_1_2.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E8%25B5%25A4%25E3%2581%25A1%25E3%2582%2583%25E3%2582%2593%25E3%2581%25AB%25E3%2582%2582%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AB%25E3%2582%2582%25E5%2584%25AA%25E3%2581%2597%25E3%2581%2584%25E5%25AE%2589%25E7%259C%25A0%25E3%2582%25AC%25E3%2582%25A4%25E3%2583%2589%25200%25E6%25AD%25B3%25E3%2581%258B%25E3%2582%2589%25E3%2581%25AE%25E3%2583%258D%25E3%2583%25B3%25E3%2583%258D%25E3%2583%2588%25E3%2583%25AC%25E3%2583%25BC%25E3%2583%258B%25E3%2583%25B3%25E3%2582%25B0&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E8%25B5%25A4%25E3%2581%25A1%25E3%2582%2583%25E3%2582%2593%25E3%2581%25AB%25E3%2582%2582%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AB%25E3%2582%2582%25E5%2584%25AA%25E3%2581%2597%25E3%2581%2584%25E5%25AE%2589%25E7%259C%25A0%25E3%2582%25AC%25E3%2582%25A4%25E3%2583%2589%25200%25E6%25AD%25B3%25E3%2581%258B%25E3%2582%2589%25E3%2581%25AE%25E3%2583%258D%25E3%2583%25B3%25E3%2583%258D%25E3%2583%2588%25E3%2583%25AC%25E3%2583%25BC%25E3%2583%258B%25E3%2583%25B3%25E3%2582%25B0" rel="nofollow noopener" target="_blank">
						赤ちゃんにもママにも優しい安眠ガイド 0歳からのネンネトレーニング [ 清水悦子 ]					</a>
				</div>

									<div class="pochipp-box__info">清水 悦子, 神山 潤 </div>
				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=%E8%B5%A4%E3%81%A1%E3%82%83%E3%82%93%E3%81%AB%E3%82%82%E3%83%9E%E3%83%9E%E3%81%AB%E3%82%82%E5%84%AA%E3%81%97%E3%81%84%E5%AE%89%E7%9C%A0%E3%82%AC%E3%82%A4%E3%83%89%200%E6%AD%B3%E3%81%8B%E3%82%89%E3%81%AE%E3%83%8D%E3%83%B3%E3%83%8D%E3%83%88%E3%83%AC%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E8%25B5%25A4%25E3%2581%25A1%25E3%2582%2583%25E3%2582%2593%25E3%2581%25AB%25E3%2582%2582%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AB%25E3%2582%2582%25E5%2584%25AA%25E3%2581%2597%25E3%2581%2584%25E5%25AE%2589%25E7%259C%25A0%25E3%2582%25AC%25E3%2582%25A4%25E3%2583%2589%25200%25E6%25AD%25B3%25E3%2581%258B%25E3%2582%2589%25E3%2581%25AE%25E3%2583%258D%25E3%2583%25B3%25E3%2583%258D%25E3%2583%2588%25E3%2583%25AC%25E3%2583%25BC%25E3%2583%258B%25E3%2583%25B3%25E3%2582%25B0&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E8%25B5%25A4%25E3%2581%25A1%25E3%2582%2583%25E3%2582%2593%25E3%2581%25AB%25E3%2582%2582%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AB%25E3%2582%2582%25E5%2584%25AA%25E3%2581%2597%25E3%2581%2584%25E5%25AE%2589%25E7%259C%25A0%25E3%2582%25AC%25E3%2582%25A4%25E3%2583%2589%25200%25E6%25AD%25B3%25E3%2581%258B%25E3%2582%2589%25E3%2581%25AE%25E3%2583%258D%25E3%2583%25B3%25E3%2583%258D%25E3%2583%2588%25E3%2583%25AC%25E3%2583%25BC%25E3%2583%258B%25E3%2583%25B3%25E3%2582%25B0" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：1日のスケジュールをどうするか考えるのに非常に参考になった</p>


		<div class="pochipp-box"
			data-id="2948"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="255f8f98"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%2596%25B0%25E3%2581%2597%25E3%2581%2584%25E3%2583%2591%25E3%2583%2591%25E3%2581%25AE%25E6%2595%2599%25E7%25A7%2591%25E6%259B%25B8&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%2596%25B0%25E3%2581%2597%25E3%2581%2584%25E3%2583%2591%25E3%2583%2591%25E3%2581%25AE%25E6%2595%2599%25E7%25A7%2591%25E6%259B%25B8" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/1295/9784058001295.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%2596%25B0%25E3%2581%2597%25E3%2581%2584%25E3%2583%2591%25E3%2583%2591%25E3%2581%25AE%25E6%2595%2599%25E7%25A7%2591%25E6%259B%25B8&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%2596%25B0%25E3%2581%2597%25E3%2581%2584%25E3%2583%2591%25E3%2583%2591%25E3%2581%25AE%25E6%2595%2599%25E7%25A7%2591%25E6%259B%25B8" rel="nofollow noopener" target="_blank">
						新しいパパの教科書					</a>
				</div>

									<div class="pochipp-box__info">NPO法人ファザーリング・ジャパン</div>
				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=%E6%96%B0%E3%81%97%E3%81%84%E3%83%91%E3%83%91%E3%81%AE%E6%95%99%E7%A7%91%E6%9B%B8&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%2596%25B0%25E3%2581%2597%25E3%2581%2584%25E3%2583%2591%25E3%2583%2591%25E3%2581%25AE%25E6%2595%2599%25E7%25A7%2591%25E6%259B%25B8&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E6%2596%25B0%25E3%2581%2597%25E3%2581%2584%25E3%2583%2591%25E3%2583%2591%25E3%2581%25AE%25E6%2595%2599%25E7%25A7%2591%25E6%259B%25B8" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：父親になるってどういうことか、何を気を付けないといけないかなどの心構えを勉強するのによかった</p>


		<div class="pochipp-box"
			data-id="2949"
			data-img="l"
			data-lyt-pc="dflt"
			data-lyt-mb="vrtcl"
			data-btn-style="dflt"
			data-btn-radius="on"
			data-sale-effect="none"
			 data-cvkey="5ebfb642"		>
							<div class="pochipp-box__image">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E5%2587%25BA%25E7%2594%25A3%25E3%2583%25BB%25E8%2582%25B2%25E5%2585%2590%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AE%25E3%2583%2588%25E3%2583%25AA%25E3%2582%25BB%25E3%2583%2584&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E5%2587%25BA%25E7%2594%25A3%25E3%2583%25BB%25E8%2582%25B2%25E5%2585%2590%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AE%25E3%2583%2588%25E3%2583%25AA%25E3%2582%25BB%25E3%2583%2584" rel="nofollow noopener" target="_blank">
						<img loading="lazy" decoding="async" src="https://thumbnail.image.rakuten.co.jp/@0_mall/book/cabinet/2131/9784907902131.jpg?_ex=400x400" alt="" width="120" height="120" />					</a>
				</div>
						<div class="pochipp-box__body">
				<div class="pochipp-box__title">
					<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E5%2587%25BA%25E7%2594%25A3%25E3%2583%25BB%25E8%2582%25B2%25E5%2585%2590%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AE%25E3%2583%2588%25E3%2583%25AA%25E3%2582%25BB%25E3%2583%2584&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E5%2587%25BA%25E7%2594%25A3%25E3%2583%25BB%25E8%2582%25B2%25E5%2585%2590%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AE%25E3%2583%2588%25E3%2583%25AA%25E3%2582%25BB%25E3%2583%2584" rel="nofollow noopener" target="_blank">
						出産・育児ママのトリセツ 「子どもができて妻が別人になりました」というあなた					</a>
				</div>

									<div class="pochipp-box__info">山本ユキコ</div>
				
				
							</div>
				<div class="pochipp-box__btns"
		data-maxclmn-pc="fit"
		data-maxclmn-mb="1"
	>
					<div class="pochipp-box__btnwrap -amazon">
								<a href="https://www.amazon.co.jp/s?k=%E5%87%BA%E7%94%A3%E3%83%BB%E8%82%B2%E5%85%90%E3%83%9E%E3%83%9E%E3%81%AE%E3%83%88%E3%83%AA%E3%82%BB%E3%83%84&#038;tag=shu65-22" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						Amazon					</span>
									</a>
			</div>
							<div class="pochipp-box__btnwrap -rakuten">
								<a href="https://hb.afl.rakuten.co.jp/hgc/39c5c75e.b3799909.39c5c75f.e5fd5e7d/?pc=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E5%2587%25BA%25E7%2594%25A3%25E3%2583%25BB%25E8%2582%25B2%25E5%2585%2590%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AE%25E3%2583%2588%25E3%2583%25AA%25E3%2582%25BB%25E3%2583%2584&#038;m=https%3A%2F%2Fsearch.rakuten.co.jp%2Fsearch%2Fmall%2F%25E5%2587%25BA%25E7%2594%25A3%25E3%2583%25BB%25E8%2582%25B2%25E5%2585%2590%25E3%2583%259E%25E3%2583%259E%25E3%2581%25AE%25E3%2583%2588%25E3%2583%25AA%25E3%2582%25BB%25E3%2583%2584" class="pochipp-box__btn" rel="nofollow noopener" target="_blank">
					<span>
						楽天市場					</span>
									</a>
			</div>
											</div>
								<div class="pochipp-box__logo">
					<img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/plugins/pochipp/assets/img/pochipp-logo-t1.png" alt="" width="32" height="32">
					<span>ポチップ</span>
				</div>
					</div>
	


<p><strong>良かったポイント</strong>：子供だけでなく妻に対して気を付けないといけないことが何かを勉強するのによかった</p>



<p>特に最初の「<a href="https://amzn.to/3YsCKvM" target="_blank" rel="noreferrer noopener">ベネッセ・ムック 最新！初めての育児新百科</a>」は育児に関して知っておいたほうがいいことを網羅的に写真つきで分かりやすく説明してくれている本で、育児初心者の自分にとても勉強になることが多かった印象です。</p>



<h2 class="wp-block-heading">終わりに</h2>



<p>今回は育休中の自分の過ごし方をまとめてみました。振り返ってみるといろいろあったのですが、ちゃんと先輩パパさんにいろいろ聞いたり本で勉強しておいてよかったということが多かった印象です。</p>



<p>この記事がこれから育休を取る方の参考になれば幸いです。</p><p>The post <a href="https://www.mattari-benkyo-note.com/2023/03/21/childcare_leave/">育休前の自分に伝えたい育休の過ごし方</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.mattari-benkyo-note.com/2023/03/21/childcare_leave/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2137</post-id>	</item>
		<item>
		<title>[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.3 デノイジング拡散確率モデル</title>
		<link>https://www.mattari-benkyo-note.com/2023/03/16/diffusion_model_book_2_3/</link>
					<comments>https://www.mattari-benkyo-note.com/2023/03/16/diffusion_model_book_2_3/#respond</comments>
		
		<dc:creator><![CDATA[Shuji Suzuki (shu)]]></dc:creator>
		<pubDate>Wed, 15 Mar 2023 22:09:48 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[pytorch]]></category>
		<category><![CDATA[拡散モデル]]></category>
		<category><![CDATA[書籍]]></category>
		<category><![CDATA[機械学習]]></category>
		<guid isPermaLink="false">https://www.mattari-benkyo-note.com/?p=2116</guid>

					<description><![CDATA[<p>先日紹介した「拡散モデル　データ生成技術の数理」をちゃんと理解するために数式を改めて追ったり、説明されているアルゴリズムを実装したりしています。 その第3弾として「2.3 デノイジング拡散確率モデル」で説明されているデノ [&#8230;]</p>
<p>The post <a href="https://www.mattari-benkyo-note.com/2023/03/16/diffusion_model_book_2_3/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.3 デノイジング拡散確率モデル</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>先日紹介した「<a href="https://amzn.to/3SC3LMc" target="_blank" rel="noopener" title="拡散モデル　データ生成技術の数理">拡散モデル　データ生成技術の数理</a>」をちゃんと理解するために数式を改めて追ったり、説明されているアルゴリズムを実装したりしています。</p>



<p>その第3弾として「2.3 デノイジング拡散確率モデル」で説明されているデノイジング拡散確率モデル（DDPM）の学習とそれを使ったサンプリングについてPython(深層学習部分はPytorch)でコードを書いて試したのでそのまとめになります。今回の記事ではDDPMの細かい数式を説明すると記事の量がすごいことになりそうなので、重要な部分だけ説明していきます。</p>



<p>また、この本を買うか迷っている方は私が読んだ感想をこちらの記事に書いてますので参考にしてみてください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-まったり勉強ノート wp-block-embed-まったり勉強ノート"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="a1lYO13NFR"><a href="https://www.mattari-benkyo-note.com/2023/02/23/diffusion_model_book_review/">[書評] 拡散モデル データ生成技術の数理 ー 目覚ましい画像生成の発展の裏側を知りたい人へ</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;[書評] 拡散モデル データ生成技術の数理 ー 目覚ましい画像生成の発展の裏側を知りたい人へ&#8221; &#8212; まったり勉強ノート" src="https://www.mattari-benkyo-note.com/2023/02/23/diffusion_model_book_review/embed/#?secret=anhJj8X2Xf#?secret=a1lYO13NFR" data-secret="a1lYO13NFR" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p>また、この記事で紹介したコードは以下にあげてありますので、コード全体を確認したい方はこちらをご覧ください。</p>



<p><a href="https://github.com/shu65/diffusion-model-book/blob/main/diffusion_model_book_2_3_ddpm.ipynb" target="_blank" rel="noopener" title="">https://github.com/shu65/diffusion-model-book/blob/main/diffusion_model_book_2_3_ddpm.ipynb</a></p>



<h2 class="wp-block-heading">デノイジング拡散確率モデルとは</h2>



<p>デノイジング拡散確率モデル（DDPM）はデータに対して徐々にノイズを加えていく拡散過程を逆向きに辿っていく逆拡散過程によってデータ生成を行います。図でみると分かりやすいと思うので拡散過程と逆拡散過程の関係図を以下に示します。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/ddpm_flow-1-1024x627.png" alt="デノイジング拡散確率モデルの流れ" class="wp-image-2215" width="768" height="470" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/ddpm_flow-1-1024x627.png 1024w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/ddpm_flow-1-300x184.png 300w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/ddpm_flow-1-768x470.png 768w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/ddpm_flow-1-1536x940.png 1536w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/ddpm_flow-1.png 1992w" sizes="auto, (max-width: 768px) 100vw, 768px" /><figcaption class="wp-element-caption">デノイジング拡散確率モデル</figcaption></figure></div>


<p>まずは上の図の上段の拡散過程についてです。ここでは\(\boldsymbol{x}_0\)がオリジナルのデータで、これに徐々にノイズを加えていき、\(\boldsymbol{x}_1, \boldsymbol{x}_2, \boldsymbol{x}_3, &#8230;, \boldsymbol{x}_T\)といいうデータを作っていきます。これを確率密度関数で表すと以下のようになります。</p>



<p>$$ \begin{align*}<br>q(\boldsymbol{x}_{1:T}|\boldsymbol{x}_0) :=&amp; \prod_{t=1}^T q(\boldsymbol{x}_t|\boldsymbol{x}_{t-1}) \tag{2.1.1} \\<br>q(\boldsymbol{x}_{t}|\boldsymbol{x}_{t-1}) :=&amp; \mathcal{N}(\boldsymbol{x}_t; \sqrt{\alpha_t}\boldsymbol{x}_{t-1}, \beta_t \boldsymbol{I}) \tag{2.1.2} \\<br>\end{align*} $$</p>



<p>ここで\(\beta_t\) は分散の大きさを制御するパラメータで、\(0&lt;\beta_1&lt;\beta_2&lt;&#8230;&lt;\beta_T&lt;1\)です。また、\(\alpha_t := 1 &#8211; \beta_t\) で、\(\alpha_t, \beta_t\)を合わせてノイズスケジュールと呼びます。</p>



<p>ここで、\(\mathcal{N}(\boldsymbol{x}_t; \sqrt{\alpha_t}\boldsymbol{x}_{t-1}, \beta_t \boldsymbol{I})\) について詳しく見ていきます。この拡散過程を繰り返していくと、\(\beta_t\) は徐々に大きくなります。結果として、ノイズ成分は大きくなっていきます。</p>



<p>一方、\(\beta_t\)が大きくなるということは\(\alpha_t := 1 &#8211; \beta_t\) なので\(\boldsymbol{x}_{t-1}\)の係数の\(\sqrt{\alpha_t}\)はどんどん小さくなっていきます。結果として、拡散過程を繰り返していくと任意の\(\boldsymbol{x}_{0}\)に対して、以下のような近似ができるようになります。</p>



<p>$$ \begin{align*}<br>q(\boldsymbol{x}_{T}|\boldsymbol{x}_{0}) :=&amp; \mathcal{N}(\boldsymbol{x}_T; 0,  \boldsymbol{I}) \tag{2.1.3} \\<br>\end{align*} $$</p>



<p>次に、図の下段の逆拡散過程です。これは\(\mathcal{N}(\boldsymbol{x}_T; 0,  \boldsymbol{I}) \)からスタートして拡散過程を逆向きに辿っていく処理になります。</p>



<p>この逆拡散過程の各ステップを正規分布で表し、この正規分布の平均と共分散行列を一つ前のステップの変数\(\boldsymbol{x}_{t}\)と時刻\(t\)を入力としてパラメータ\(\theta\)を使ったモデル(\(\mu_{\theta}(\boldsymbol{x}_{t}, t), \Sigma(\boldsymbol{x}_{t}, t))\))として表します。これを使うと逆拡散過程は以下のような式で表すことができます。</p>



<p>$$ \begin{align*}<br>p_{\theta}(\boldsymbol{x}_{0:T}) :=&amp; p(\boldsymbol{x}_T)\prod_{t=1}^T p_{\theta}(\boldsymbol{x}_t-1|\boldsymbol{x}_{t}) \tag{2.1.4} \\<br>p_{\theta}(\boldsymbol{x}_{t-1}|\boldsymbol{x}_{t}) :=&amp; \mathcal{N}(\boldsymbol{x}_{t-1}; \mu_{\theta}(\boldsymbol{x}_{t}, t), \Sigma_{\theta}(\boldsymbol{x}_{t}, t)) \tag{2.1.5} \\<br>p(\boldsymbol{x}_{T}) =&amp; \mathcal{N}(\boldsymbol{x}_T; 0,  \boldsymbol{I}) \tag{2.1.6}<br>\end{align*} $$</p>



<p>この\(\mu_{\theta}(\boldsymbol{x}_{t}, t), \Sigma_{\theta}(\boldsymbol{x}_{t}, t)\)は後ほど示す通りニューラルネットワークなどを使ってモデル化します。これによって逆拡散過程を実現しています。</p>



<p>では次から実際にこのモデルのパラメータ\(\theta\)の学習方法とそれを使ったサンプリングを見ていきます。</p>



<h2 class="wp-block-heading">デノイジング拡散確率モデルの学習</h2>



<p>デノイジング拡散確率モデルのモデルの学習方法の説明を本来はしたいのですが、この説明はすごく長いものになります。このため、詳しい説明は本を見ていただくとして、ここでは学習を回すうえで重要な変数と式に関する簡単な説明にとどめておきます。</p>



<p>まず、先ほど示した式(2.1.2)などを利用すると以下の式が導けます。</p>



<p>$$ \begin{align*}<br>q(\boldsymbol{x}_{t}|\boldsymbol{x}_{0}) :=&amp; \mathcal{N}(\boldsymbol{x}_t; \sqrt{\bar{\alpha}_t}\boldsymbol{x}_{0}, \bar{\beta}_t \boldsymbol{I}) \tag{2.1.7} \\<br>\bar{\alpha}_t := \prod_{s=1}^t \alpha_s \tag{2.1.8} \\<br>\bar{\beta}_t := 1 &#8211; \bar{\alpha}_t \tag{2.1.9} \\<br>\end{align*} $$</p>



<p>式(2.1.7)から式(2.1.9)の導出の証明に関しては本の式(2.1)の下に証明がありますので詳しく知りたい方はそちらをご覧ください。</p>



<p>これにより、わざわざ式(2.1.2)に従って、\(\boldsymbol{x}_{0}\)から徐々に\(t\)を大きくして\(\boldsymbol{x}_{t}\)を生成しなくても、式(2.1.7)を使うことで正規分布のサンプリングを１度すれば任意の\(t\)の\(\boldsymbol{x}_{t}\)のデータを生成できることになります。学習ではこれを利用して高速にランダムな\(t\)のデータを生成して学習に利用します。</p>



<p>次にデノイジング拡散確率モデルの学習で用いるロス関数についてです。これに関しては前の記事でも紹介したスコアベースモデルと同じようにデノイジングスコアマッチングを利用します。また、ロス関数の導出は先ほど説明した通り、ちゃんと説明しようとするとすごく長いので本で示されている最終的な結果を以下に示します。</p>



<p>$$ \begin{align*}<br>L_{\gamma}(\theta) =&amp; \sum_{t=1}^T w_t E_{\boldsymbol{x}_0, \epsilon} \left\{ \left\| \epsilon &#8211; \epsilon_{\theta}(\sqrt{\bar{\alpha}_t}\boldsymbol{x}_0 + \sqrt{\bar{\beta}_t}\epsilon, t) \right\|^2 \right\} \tag{2.1.10} \\<br>\gamma =&amp; \left\{ w_1, w_2, &#8230;, w_T \right\} \tag{2.1.11} <br>\end{align*} $$</p>



<p>この式の\(w_t\)に関しては本によると\(w_t = 1\) がよくつかわれるとのことなので、このあとの実装のコードでも\(w_t = 1\)としています。</p>



<p>ここで、式の導出を省略して関係が分かりにくくなっていため、逆拡散過程の説明で出てきた式(2.1.5)の中の\(\mu_{\theta}(\boldsymbol{x}_{t}, t), \Sigma_{\theta}(\boldsymbol{x}_{t}, t)\)と式(2.1.10)の中で出てきている\(\epsilon_{\theta}(\sqrt{\bar{\alpha}_t}\boldsymbol{x}_0 + \sqrt{\bar{\beta}_t}\epsilon, t)\) との関係を説明しておきます。</p>



<p>逆拡散過程を行う上で\(\mu_{\theta}(\boldsymbol{x}_{t}, t), \Sigma_{\theta}(\boldsymbol{x}_{t}, t)\)のパラメータ\(\theta\)を学習する必要があります。ここで、本の説明によると\(\Sigma_{\theta}(\boldsymbol{x}_{t}, t)\)に関してはパラメータ\(\theta\)に依存しない固定の\(\Sigma_{\theta}(\boldsymbol{x}_{t}, t)) = \sigma_t^2 \boldsymbol{I}\)を使うことが多いそうです。先ほど示したロス関数も\(\Sigma_{\theta}(\boldsymbol{x}_{t}, t)) = \sigma_t^2 \boldsymbol{I}\)として式変形しています。</p>



<p>次に\(\mu_{\theta}(\boldsymbol{x}_{t}, t)\)の部分です。こちらはロス関数の導出の過程で結局は\(t\)の時点で加えられたノイズを予測できるモデルに置き換えることができます。このため、\(\mu_{\theta}(\boldsymbol{x}_{t}, t)\)ではなく、ノイズを予測する\(\epsilon_{\theta}(\boldsymbol{x}_{t}, t)\)がロス関数の中で登場しています。</p>



<p>また、\(\boldsymbol{x}_{t}\) は式(2.1.7)から以下のようになります。</p>



<p>$$ \begin{align*}<br>\boldsymbol{x}_{t} =&amp; \sqrt{\bar{\alpha}_t}\boldsymbol{x}_0 + \sqrt{\bar{\beta}_t}\epsilon \\<br>\epsilon \sim&amp; \mathcal{N}(0, \boldsymbol{I}) \\<br>\tag{2.1.12}<br>\end{align*} $$</p>



<p>本のほうには丁寧にこのロス関数の導出が書かれているので詳細を知りたい方はぜひ本を読んでください。</p>



<p>この式(2.1.10)をロス関数として利用したデノイジング拡散確率モデルの学習の疑似コードは以下の通りです。(「拡散モデル　データ生成技術の数理」Algorithm 2.2の引用)</p>



<ol class="wp-block-list">
<li>repeat</li>



<li>\(\quad \boldsymbol{x}_0 \sim p_{\text{data}}(\boldsymbol{x}_0)\)</li>



<li>\(\quad t \sim \text{Uniform}({1, &#8230;, T})\)</li>



<li>\(\quad \epsilon \sim \mathcal{N}(0, \boldsymbol{I})\)</li>



<li>\(\quad g := \nabla_{\theta} w_t \left\| \epsilon &#8211; \epsilon_{\theta}(\sqrt{\bar{\alpha_t}} \boldsymbol{x}_0 + \sqrt{\bar{\beta_{t}}} \epsilon, t)\right\|^2 \)</li>



<li>\(\quad \theta := \theta &#8211; \alpha g \)</li>



<li>until converged</li>
</ol>



<p>ここで本では特に説明されてないですが、式(2.1.10)の最初の\(\sum_{t=1}^T\)の部分は少し変更して、\(t=1\)から\(t=T\)ランダムに\(t\)を選んで使用するように変更されています。</p>



<p>このアルゴリズムでは、まず最初にデータ\(\boldsymbol{x}_0 \)と\(t\)を選び、それらを用いて式(2.1.10)のロス関数を計算します。その後、勾配を計算してパラメータのアップデートをするということを繰り返します。6行目の勾配を使ったパラメータのアップデートは深層学習の基本的なパラメータ更新の確率的勾配降下法を利用したコードになっています。この部分は確率的勾配降下法以外のもの、例えばAdamなどでも問題ありません。</p>



<p>この疑似コードを基にPyTorchで実装するとこのようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="train_ddpm.py" data-lang="Python"><code>batch_size = 512
n_steps = 100000

dataloader = torch.utils.data.DataLoader(dataset, batch_size=512, shuffle=True, num_workers=0)
dataloader_iter = iter(dataloader)

model = Model().to(device)

optimizer = torch.optim.Adam(model.parameters())
lr_scheduler = torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr=0.001, total_steps=n_steps)
loss_func = torch.nn.MSELoss(reduction=&quot;none&quot;)

for i in range(n_steps):
  try:
    x0 = next(dataloader_iter)[0]
  except StopIteration:
    dataloader_iter = iter(dataloader)
    x0 = next(dataloader_iter)[0]
  x0 = x0.to(device)

  optimizer.zero_grad()

  noise = torch.randn_like(x0)
  t = torch.randint(0, len(x0), (x0.shape[0],), device=device)
  x = torch.sqrt(alpha_bars[t])[:, None] * x0 + torch.sqrt(beta_bars[t])[:, None] * noise
  noise_pred = model(x, t)
  w = 1.0
  losses = w * loss_func(noise_pred, noise)
  loss = losses.mean()

  loss.backward()
  optimizer.step()
  lr_scheduler.step()</code></pre></div>



<p>基本的には疑似コードとほぼ同じですが、ロス関数周りで違うところがあるので、簡単に説明します。まず、深層学習なのでミニバッチを使った学習に置き換えています。このため、\(\boldsymbol{x}_0 \)も一つだけでなく、バッチサイズ分ランダムに選んでいます。これに伴って、\(t\)もバッチサイズ分ランダムに選んで利用します。そして、最終的には各データ点のロス関数の値の平均を計算して勾配を計算するという形に置き換えています。</p>



<p>また、パラメータの最適化の部分は確率勾配降下法ではなくAdamを利用しています。</p>



<h2 class="wp-block-heading">デノイジング拡散確率モデルを使ったサンプリング</h2>



<p>ここから先ほど紹介した方法で学習したモデルを利用してどのようにサンプリングしていくか、について説明します。</p>



<p>基本的には式(2.1.5)に従って逆拡散過程のステップを繰り返すことで実現します。</p>



<p>ここで、説明を省略してしまいましたが、式(2.1.5)の中にでてくる\(\mu_{\theta}(\boldsymbol{x}_{t}, t)\)を学習したノイズを予測するモデル\(\epsilon_{\theta}(\boldsymbol{x}_{t}, t)\)を使って表すと以下のようになります。</p>



<p>$$ \begin{align*}<br>\mu_{\theta}(\boldsymbol{x}_{t}, t) =&amp; \frac{1}{\sqrt{\bar{\alpha}}} \left( \boldsymbol{x}_{t} &#8211; \frac{\beta_t}{\sqrt{\bar{\beta_t}}} \epsilon_{\theta}(\boldsymbol{x}_{t}, t) \right) \tag{2.1.13}<br>\end{align*} $$</p>



<p>また、一方、\(\Sigma_{\theta}(\boldsymbol{x}_{t}, t))\)は先ほど説明した通り、\(\Sigma_{\theta}(\boldsymbol{x}_{t}, t)) = \sigma_t^2 \boldsymbol{I}\)です。</p>



<p>これらと式(2.1.5)に従ったサンプリングの疑似コードは以下の通りです。(「拡散モデル　データ生成技術の数理」Algorithm 2.3の引用)</p>



<ol class="wp-block-list">
<li>\(\boldsymbol{x}_T \sim \mathcal{N}(0, \boldsymbol{I})\)</li>



<li>for \(t=T, &#8230;, 1\) do</li>



<li>\(\quad \boldsymbol{u}_t \sim \mathcal{N}(0, \boldsymbol{I})\)</li>



<li>\(\quad\) if \(t=1\) then \(\boldsymbol{u}_t := 0\)</li>



<li>\(\quad \boldsymbol{x}_{t-1} := \frac{1}{\sqrt{\bar{\alpha}}} \left\{ \boldsymbol{x}_{t} &#8211; \frac{\beta_t}{\sqrt{\bar{\beta_t}}} \epsilon_{\theta}(\boldsymbol{x}_{t}, t) \right\} + \sigma_t  \boldsymbol{u}_t \)</li>



<li>end for</li>



<li>return \(\boldsymbol{x}_0\)</li>
</ol>



<p>基本的には徐々にノイズを取り除くことで目的のデータをサンプリングするという流れです。</p>



<p>PyTorchのコードとしては以下のようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="ddpm_sample" data-lang="Python"><code>def ddpm_sample(n_samples, model, alphas, betas, beta_bars):
    xt = torch.randn(n_samples, 2)
    T = len(alphas)
    for t in range(T -1, -1, -1):
      print(f&quot;t:{t}&quot;)
      ut = torch.randn(n_samples, 2)
      if t == 0:
        ut[:, :] = 0.0
      with torch.no_grad():
        noise_pred = model(xt, t*torch.ones(n_samples, dtype=xt.dtype))
        sigma_t = torch.sqrt(betas[t])
        xt = 1 / torch.sqrt(alphas[t]) * (xt - betas[t]/torch.sqrt(beta_bars[t])*noise_pred) + sigma_t*ut
    return xt</code></pre></div>



<p>ここで、<code>n_samples</code>がサンプリングするサンプル数、<code>model</code>が\(\epsilon_{\theta}(\boldsymbol{x}_{t}, t)\)、<code>alphas</code>、<code>betas</code>, <code>beta_bars</code>がそれぞれ\(\alpha_t, \beta_t, \bar{\beta}_t\) のリストです。</p>



<h2 class="wp-block-heading">実行例</h2>



<p>先ほど紹介したPythonコードを実際に動かした例も示しておきます。参考例として入力となる\(\boldsymbol{x}\)のサンプリングする分布の確率密度関数は以下のように平均が違うガウス分布二つの混合分布とし、サンプリングしたデータを正規化して使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="generate_dataset" data-lang="Python"><code>n_samples = int(1e6)
sigma = 0.01

dist0 = torch.distributions.MultivariateNormal(torch.tensor([-2, -2], dtype=torch.float).to(device), sigma*torch.eye(2, dtype=torch.float).to(device))
samples0 = dist0.sample(torch.Size([n_samples//2]))
    
dist1 = torch.distributions.MultivariateNormal(torch.tensor([2, 2], dtype=torch.float).to(device), sigma*torch.eye(2, dtype=torch.float).to(device))
samples1 = dist1.sample(torch.Size([n_samples//2]))
samples = torch.vstack((samples0, samples1))

mean = torch.mean(samples, dim=0)
std = torch.std(samples, dim=0)

normalized_samples = (samples - mean[None, :])/std[None, :]</code></pre></div>



<p>使用する\(\boldsymbol{x}\)を2Dのヒストグラムで可視化すると以下のようになります。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="266" height="264" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/sample_density-1.png" alt="使用するデータの可視化結果" class="wp-image-2211" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/sample_density-1.png 266w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/sample_density-1-150x150.png 150w" sizes="auto, (max-width: 266px) 100vw, 266px" /><figcaption class="wp-element-caption">使用するデータの可視化結果</figcaption></figure></div>


<p>このデータを再現できるようにデノイジング拡散確率モデルを学習します。コードとしては先ほど示した通りです。</p>



<p>学習が終わったら次は以下のようにサンプリングを行います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="run_ddpm_sample" data-lang="Python"><code>samples_pred = ddpm_sample(n_samples=100000, model=model, alphas=alphas, betas=betas, beta_bars=beta_bars)</code></pre></div>



<p>サンプリングされたデータの2Dのヒストグラムは以下の通りです。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="266" height="264" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/predicted_sample_density-3.png" alt="デノイジング拡散確率モデルによるサンプリングデータの可視化結果" class="wp-image-2214" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/predicted_sample_density-3.png 266w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/predicted_sample_density-3-150x150.png 150w" sizes="auto, (max-width: 266px) 100vw, 266px" /><figcaption class="wp-element-caption">デノイジング拡散確率モデルによるサンプリングデータの可視化結果</figcaption></figure></div>


<p>可視化結果をみると元の分布の平均の近くにデータが集中しているので、うまくいっていると考えられます。</p>



<h2 class="wp-block-heading">終わりに</h2>



<p>今回は「<a href="https://amzn.to/3SC3LMc" target="_blank" rel="noopener" title="拡散モデル　データ生成技術の数理">拡散モデル　データ生成技術の数理</a>」の2.3のデノイジング拡散確率モデルの簡単な説明とコードを書いたのでそのまとめの記事になります。先日スコアベースモデルのコードを用意したことで、そのコードを参考に今回のデノイジング拡散確率モデルをすぐに作ることができたのですが、説明はすごい大変でした。</p>



<p>スコアベースモデルのほうも気になるという方はこちらをご覧ください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-まったり勉強ノート wp-block-embed-まったり勉強ノート"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="QbbiRh4C0Y"><a href="https://www.mattari-benkyo-note.com/2023/03/08/diffusion_model_book_2_2/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.2 スコアベースモデル</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.2 スコアベースモデル&#8221; &#8212; まったり勉強ノート" src="https://www.mattari-benkyo-note.com/2023/03/08/diffusion_model_book_2_2/embed/#?secret=J4EXuySmX8#?secret=QbbiRh4C0Y" data-secret="QbbiRh4C0Y" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p>今後、3章で紹介されている連続時間化拡散モデルのVE-SDEのほうも紹介予定です。コードは昨日できました。ただ、思ったよりも説明が大変そうなので、記事を書くのに時間がかかると思います。</p>



<p>この記事が少しでもみなさんの理解の助けになれば幸いです。</p>



<h2 class="wp-block-heading">参考文献</h2>



<ol class="wp-block-list">
<li>Ho, J., Jain, A., &amp; Abbeel, P. (2020). Denoising Diffusion Probabilistic Models. ArXiv, abs/2006.11239.</li>



<li><a href="https://github.com/hojonathanho/diffusion" target="_blank" rel="noopener" title="">https://github.com/hojonathanho/diffusion</a></li>
</ol><p>The post <a href="https://www.mattari-benkyo-note.com/2023/03/16/diffusion_model_book_2_3/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.3 デノイジング拡散確率モデル</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.mattari-benkyo-note.com/2023/03/16/diffusion_model_book_2_3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">2116</post-id>	</item>
		<item>
		<title>[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.2 スコアベースモデル</title>
		<link>https://www.mattari-benkyo-note.com/2023/03/08/diffusion_model_book_2_2/</link>
					<comments>https://www.mattari-benkyo-note.com/2023/03/08/diffusion_model_book_2_2/#respond</comments>
		
		<dc:creator><![CDATA[Shuji Suzuki (shu)]]></dc:creator>
		<pubDate>Tue, 07 Mar 2023 21:33:32 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[pytorch]]></category>
		<category><![CDATA[SBM]]></category>
		<category><![CDATA[スコアベースモデル]]></category>
		<category><![CDATA[拡散モデル]]></category>
		<category><![CDATA[書籍]]></category>
		<category><![CDATA[機械学習]]></category>
		<guid isPermaLink="false">https://www.mattari-benkyo-note.com/?p=1932</guid>

					<description><![CDATA[<p>先日紹介した「拡散モデル　データ生成技術の数理」をちゃんと理解するために数式を改めて追ったり、説明されているアルゴリズムを実装したりしています。 その第2弾として「2.2 スコアベースモデル」で説明されているスコアベース [&#8230;]</p>
<p>The post <a href="https://www.mattari-benkyo-note.com/2023/03/08/diffusion_model_book_2_2/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.2 スコアベースモデル</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>先日紹介した「<a href="https://amzn.to/3SC3LMc" target="_blank" rel="noopener" title="拡散モデル　データ生成技術の数理">拡散モデル　データ生成技術の数理</a>」をちゃんと理解するために数式を改めて追ったり、説明されているアルゴリズムを実装したりしています。</p>



<p>その第2弾として「2.2 スコアベースモデル」で説明されているスコアベースモデルの学習とそれを使ったサンプリングについてPython(深層学習部分はPytorch)でコードを書いて試したのでそのまとめになります。</p>



<p>また、この本を買うか迷っている方は私が読んだ感想をこちらの記事に書いてますので参考にしてみてください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-まったり勉強ノート wp-block-embed-まったり勉強ノート"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="feZfZwZCVZ"><a href="https://www.mattari-benkyo-note.com/2023/02/23/diffusion_model_book_review/">[書評] 拡散モデル データ生成技術の数理 ー 目覚ましい画像生成の発展の裏側を知りたい人へ</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;[書評] 拡散モデル データ生成技術の数理 ー 目覚ましい画像生成の発展の裏側を知りたい人へ&#8221; &#8212; まったり勉強ノート" src="https://www.mattari-benkyo-note.com/2023/02/23/diffusion_model_book_review/embed/#?secret=rS3Hmaks6Y#?secret=feZfZwZCVZ" data-secret="feZfZwZCVZ" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div><figcaption class="wp-element-caption">[書評] 拡散モデル データ生成技術の数理 ー 目覚ましい画像生成の発展の裏側を知りたい人へ</figcaption></figure>



<p>また、この記事で紹介したコードは以下にあげてありますので、コード全体を確認したい方はこちらをご覧ください。</p>



<p><a href="https://github.com/shu65/diffusion-model-book/blob/main/diffusion_model_book_2_2_score_based_model.ipynb" target="_blank" rel="noopener" title="">https://github.com/shu65/diffusion-model-book/blob/main/diffusion_model_book_2_2_score_based_model.ipynb</a></p>



<h2 class="wp-block-heading">スコアベースモデルとは</h2>



<p>１章で紹介されているデノイジングスコアマッチングは以下の２つの問題点があると本では紹介されています。</p>



<ol class="wp-block-list">
<li>デノイジングスコアマッチングで推定されたスコア関数はデータ分布の密度が小さい領域で不正確</li>



<li>データ分布が多峰性を持つ場合、あるモード（確率が大きい領域）から他のモードに移る際、確率が小さい領域を通過するために非常に多くのステップを必要とする</li>
</ol>



<p>これらの問題を解決するためにスコアベースモデル（SBM）[1, 2] では複数の異なる強度のノイズによって攪乱した攪乱後分布を用意して、それらの攪乱後分布上のスコアを求めるようにしています。</p>



<h2 class="wp-block-heading">スコアベースモデルの学習</h2>



<p>スコア関数 \(s_{\theta}(\boldsymbol{x}, \sigma_t)\) を学習する際は以下のロス関数を使います。</p>



<p>$$ \begin{align*}<br>L_{\text{SBM}}(\theta) := \sum_{t=1}^T w_t E_{p_{\sigma_t}}(\tilde{\boldsymbol{x}}) \left\{ \left\| \nabla_{\tilde{\boldsymbol{x}}} \log p_{\sigma_t}(\tilde{\boldsymbol{x}}) &#8211; s_{\theta}(\tilde{\boldsymbol{x}}, \sigma_t) \right\|^2 \right\} \tag{2.2.1}<br>\end{align*} $$</p>



<p>ここで\(\sigma_t \) はノイズの強さを表す変数で\( \sigma_{min} = \sigma_1 &lt; \sigma_2 &lt;&#8230; &lt; \sigma_T = \sigma_{max}\)の合計\(T\)個をスコアベースモデルでは利用します。そして、\(p_{\sigma_t}(\tilde{\boldsymbol{x}}) \) \(x\)は\(x\)の分布\(p(x)\)を\(\sigma_t\)の強さで攪乱したあとの分布を表しています。</p>



<p>この式(2.2.1)を本の1.5.5の「デノイジングスコアマッチング」で説明されている通り、デノイジングスコアマッチングを使って式を書き換えると以下のようになります。</p>



<p>$$ \begin{align*}<br>L_{\text{DSM-SBM}}(\theta) := \sum_{t=1}^T w_t E_{\boldsymbol{x} \sim p_{data}(\boldsymbol{x}),\tilde{\boldsymbol{x}} \sim \mathcal{N}(\boldsymbol{x}, \sigma_t^2\boldsymbol{I})} \left\{ \left\| \frac{\boldsymbol{x} &#8211; \tilde{\boldsymbol{x}}}{\sigma_t^2} &#8211; s_{\theta}(\tilde{\boldsymbol{x}}, \sigma_t) \right\|^2 \right\} \tag{2.2.2}<br>\end{align*} $$</p>



<p>詳細は本にわかりやすくかいてあるので本を参照してください。</p>



<p>ここで本の式(1.9)のデノイジングスコアマッチングの式において最初に\(1/2\)があるのに式(2.2.2)ではそれが省略されています。これに関して本にはちゃんと書いてない気がしますが、おそらくこれは\(w_t\)の中に\(1/2\)が含まれているから、もしくは\(1/2\)は定数であり、最適化の際にパラメータが移動する方向は\(1/2\)のありなしで変わらないということで省略しているのではないかと思っています。</p>



<p>ここから２章にはちゃんと書いてないですが、Pythonで実装するためにさらに式変形していきます。\(\tilde{\boldsymbol{x}} \sim \mathcal{N}(\boldsymbol{x}, \sigma_t^2\boldsymbol{I})\)なので、\(\tilde{\boldsymbol{x}}\)を\(\epsilon \sim \mathcal{N}(0, \sigma_t^2 \boldsymbol{I})\)を使って表すと以下のようになります。</p>



<p>$$ \begin{align*}<br>\tilde{\boldsymbol{x}} = \boldsymbol{x} + \epsilon \tag{2.2.3}<br>\end{align*} $$</p>



<p>この式(2.2.3)を使って式(2.2.2)を式変形すると以下の通りです。</p>



<p>$$ \begin{align*}<br>L_{\text{DSM-SBM}}(\theta) :=&amp; \sum_{t=1}^T w_t E_{\boldsymbol{x} \sim p_{data}(\boldsymbol{x}),\tilde{\boldsymbol{x}} \sim \mathcal{N}(\boldsymbol{x}, \sigma_t^2\boldsymbol{I})} \left\{ \left\| \frac{\boldsymbol{x} &#8211; \tilde{\boldsymbol{x}}}{\sigma_t^2} &#8211; s_{\theta}(\tilde{\boldsymbol{x}}, \sigma_t) \right\|^2 \right\} \\<br>=&amp; \sum_{t=1}^T w_t E_{\boldsymbol{x} \sim p_{data}(\boldsymbol{x}),\epsilon \sim \mathcal{N}(\boldsymbol{x}, \sigma_t \boldsymbol{I})} \left\{ \left\| \frac{-\epsilon}{\sigma_t^2} &#8211; s_{\theta}(\tilde{\boldsymbol{x}}, \sigma_t) \right\|^2 \right\} \tag{2.2.4}<br>\end{align*} $$</p>



<p>この式を見たときに\(t=1\)から\(t=T\)までの和をとっている部分、\(T\)のサイズによっては計算量がすごいことにならないか？ということを思いました。このため、何か実装するときに工夫があるのかも？ということで[2]著者実装である[3]を見にいきました。すると2023/03/03時点では\(t=1\)から\(t=T\)ランダムに\(t\)を選び、その平均をとるということをしていました。</p>



<p>Pythonのコードのほうが分かりやすいと思うので、以下にPythonのコードも示しておきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="dsm_loss" data-lang="Python"><code>def dsm_loss(score_model, samples, sigmas):
  t = torch.randint(0, len(sigmas), (samples.shape[0],), device=sigmas.device)
  used_sigmas = sigmas[t].view(samples.shape[0], *([1] * len(samples.shape[1:])))
  noise = torch.randn_like(samples) * used_sigmas
  perturbed_samples = samples + noise
  target = - 1 / (used_sigmas ** 2) * noise
  scores = score_model(perturbed_samples, used_sigmas)
  target = target.view(target.shape[0], -1)
  scores = scores.view(scores.shape[0], -1)
  w = used_sigmas.squeeze(-1) ** 2
  loss = ((scores - target) ** 2).sum(dim=-1) * w
  return loss.mean()</code></pre></div>



<p>ここで<code>score_model</code>がスコア関数 \(s_{\theta}(\boldsymbol{x}, \sigma_t )\) 、<code>samples</code>が\(\boldsymbol{x}\)、<code>sigmas</code>が\(\{\sigma_1,&#8230;,\sigma_T\}\)の配列となっています。また、\(w_t\)は本にならって\(w_t=\sigma_t^2\)を使っています。</p>



<p>この関数では最初にランダムに\(t\)を選び、それに従ってノイズを生成し、\(\tilde{\boldsymbol{x}}\)を作ります。その後、スコア関数の<code>score_model</code>を使ってスコアを計算し、式(2.2.4)を使ってロス関数を計算します。</p>



<p>このロス関数を使ってスコア関数のパラメータを学習していきます。</p>



<p>ここで１つ、スコア関数のモデルに関して注意点があります。スコア関数は\(s_{\theta}(\boldsymbol{x}, \sigma_t) \)は\(\boldsymbol{x}\)だけでなく\(\sigma_t\)も引数にとります。このため、モデルの中でどうにかして\(\sigma_t \)と\(\boldsymbol{x}\)の入力を組み合わせる必要があります。これに関して今回のコードでは[3]の実装にならって、以下のようにして\(\boldsymbol{x}\)だけを入力として受け取るスコア関数\(s_{\theta}^{\prime}(\boldsymbol{x})\)の出力を\(\sigma_t\)で割るという形にしています。</p>



<p>$$ \begin{align*}<br>s_{\theta}(\boldsymbol{x}, \sigma_t) = s_{\theta}^{\prime}(\boldsymbol{x}) / \sigma_t \tag{2.2.5}<br>\end{align*} $$</p>



<p>また、後ほど示しますが、今回は２つのガウス分布の混合分布を入力とします。この分布はシンプルな分布なため、今回は簡単なMLPをスコア関数のモデル使用します。コードとては以下のようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="score_model" data-lang="Python"><code>import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F

class ScoreModel(nn.Module):
  def __init__(self, n_channels=2):
    super(ScoreModel, self).__init__()

    self.model = nn.Sequential(
        nn.Linear(n_channels, 2*n_channels),
        nn.ELU(),
        nn.Linear(2*n_channels, 16*n_channels),
        nn.ELU(),
        nn.Linear(16*n_channels, 2*n_channels),
        nn.ELU(),
        nn.Linear(2*n_channels, n_channels),
    )

  def forward(self, x, sigma):
    y = self.model(x)
    return y/sigma</code></pre></div>



<h2 class="wp-block-heading">スコアベースモデルを使ったサンプリング</h2>



<p>ここから学習済みのスコア関数\(s_{\theta}(\boldsymbol{x}, \sigma_t) \)を使ったサンプリングについて説明していきます。</p>



<p>スコアベースモデルを使ったサンプリング１章で紹介されたランジュバン・モンテカルロ法をベースにしています。ランジュバン・モンテカルロ法の部分についてはこちらに解説しています。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-まったり勉強ノート wp-block-embed-まったり勉強ノート"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="fM7uHxbfRU"><a href="https://www.mattari-benkyo-note.com/2023/03/03/diffusion_model_book_1_5_1/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 1.5.1 ランジュバン・モンテカルロ法</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;[勉強ノート] 「拡散モデル　データ生成技術の数理」 1.5.1 ランジュバン・モンテカルロ法&#8221; &#8212; まったり勉強ノート" src="https://www.mattari-benkyo-note.com/2023/03/03/diffusion_model_book_1_5_1/embed/#?secret=oaLMCcsv0l#?secret=fM7uHxbfRU" data-secret="fM7uHxbfRU" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<p>詳細は上の記事にかいてありますが、ランジュバン・モンテカルロ法は最初、ランダムに\(\boldsymbol{x}_0\)を生成後、以下のランジュバン・モンテカルロ法の更新則を\(K\)回繰り返すことで\(p(\boldsymbol{x})\)からサンプリングしたようなデータを作ります。</p>



<p>$$ \begin{align*}<br>\boldsymbol{x}_k := \boldsymbol{x}_{k-1} + \alpha \nabla_\boldsymbol{x} \log p(\boldsymbol{x}_{k-1}) + \sqrt{2\alpha}\boldsymbol{u}_k \tag{2.2.6}<br>\end{align*} $$</p>



<p>スコアベースモデルのサンプリングでは更新則のスコア（\(\nabla_\boldsymbol{x} \log p(\boldsymbol{x}_{k-1})\)）を学習したスコア関数に置き換えた以下の更新則を利用します。</p>



<p>$$ \begin{align*}<br>\boldsymbol{x}_{t, k} := \boldsymbol{x}_{t, k-1} + \alpha_t s_{\theta}(\boldsymbol{x}_{t, k-1}, \sigma_t)+ \sqrt{2\alpha_t}\boldsymbol{u}_k \tag{2.2.7}<br>\end{align*} $$</p>



<p>この更新則を用いたスコアベースモデルのサンプリングの疑似コードは以下の通りです。(「拡散モデル　データ生成技術の数理」Algorithm 2.1の引用)</p>



<ol class="wp-block-list">
<li>\(\boldsymbol{x}_0\)を初期化(\(\boldsymbol{x}_0 \sim \mathcal{N}(0, \sigma_T^2 \boldsymbol{I})\))</li>



<li>for \(t=1,&#8230;,T\) do</li>



<li>\(\quad \alpha_t := \alpha \sigma_t^2\/\sigma_T^2)\</li>



<li>\(\quad\) for \(k=1,&#8230;,K\) do</li>



<li>\(\qquad \boldsymbol{u}_k \sim \mathcal{N}(0, \boldsymbol{I})\)</li>



<li>\(\qquad\) if \(t=1\) and \(k=K\) then \(\boldsymbol{u}_k := 0\)</li>



<li>\(\qquad \boldsymbol{x}_{t, k} := \boldsymbol{x}_{t, k-1} + \alpha_t s_{\theta}(\boldsymbol{x}_{t, k-1}, \sigma_t)+ \sqrt{2\alpha_t}\boldsymbol{u}_k \)</li>



<li>\(\quad\) end for</li>



<li>\(\quad \boldsymbol{x}_{t-1, 0} := \boldsymbol{x}_{t, K}\) </li>



<li>end for</li>



<li>return \(\boldsymbol{x}_{0, 0}\)</li>
</ol>



<p>ここで\(\alpha\)はステップ幅のスケール、\(K\)はステップ回数です。アルゴリズムを見て分かる通り、ノイズの強度を変えながらランジュバン・モンテカルロ法を使って少しずつ\(\boldsymbol{x}_{t, k}\)を変化させています。また、７行目にある通り、各ノイズの強度の最後のステップではデノイジングのみを行うことでサンプリングの品質を向上させています。</p>



<p>この疑似コードをPythonのコードにするとこのようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="sbm_sampling" data-lang="Python"><code>def sbm_sample(n_samples, score_model, sigmas, alpha=0.1):
    sigma_T = sigmas[-1]
    x_0 = torch.randn(n_samples, 2)*sigma_T
    x_tk = x_0
    K = 200
    for t in range(len(sigmas) -1, -1, -1):
      sigma_t = sigmas[t]
      alpha_t = alpha*(sigma_t**2)/(sigma_T**2)
      print(f&quot;t:{t}, sigma_t:{sigma_t}, alpha_t:{alpha_t}&quot;)
      for k in range(K+1):
        u_k = torch.randn(n_samples, 2)
        if (k == K) and t == 0:
          u_k[:, :] = 0.0
        with torch.no_grad():
          score = score_model(x_tk, sigma_t)
          x_tk = x_tk + alpha_t * score + np.sqrt(2 * alpha_t) * u_k
    return x_tk</code></pre></div>



<p><code>n_samples</code>が生成するサンプル数、<code>score_model</code>がスコア関数、<code>sigmas</code>がノイズ強度の配列、<code>alpha</code>がステップ幅のスケールになっています。</p>



<h2 class="wp-block-heading">実行例</h2>



<p>先ほど紹介したPythonコードを実際に動かした例も示しておきます。参考例として入力となる\(\boldsymbol{x}\)のサンプリングする分布の確率密度関数は以下のように平均が違うガウス分布二つの混合分布とし、サンプリングしたデータを正規化して使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="generate_dataset" data-lang="Python"><code>n_samples = int(1e6)
sigma = 0.01

dist0 = torch.distributions.MultivariateNormal(torch.tensor([-2, -2], dtype=torch.float).to(device), sigma*torch.eye(2, dtype=torch.float).to(device))
samples0 = dist0.sample(torch.Size([n_samples//2]))
    
dist1 = torch.distributions.MultivariateNormal(torch.tensor([2, 2], dtype=torch.float).to(device), sigma*torch.eye(2, dtype=torch.float).to(device))
samples1 = dist1.sample(torch.Size([n_samples//2]))
samples = torch.vstack((samples0, samples1))

mean = torch.mean(samples, dim=0)
std = torch.std(samples, dim=0)

normalized_samples = (samples - mean[None, :])/std[None, :]</code></pre></div>



<p>使用する\(\boldsymbol{x}\)を2Dのヒストグラムで可視化すると以下のようになります。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img loading="lazy" decoding="async" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/sample_density.png" alt="使用するデータの可視化結果" class="wp-image-2091" width="266" height="264" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/sample_density.png 266w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/sample_density-150x150.png 150w" sizes="auto, (max-width: 266px) 100vw, 266px" /><figcaption class="wp-element-caption">使用するデータの可視化結果</figcaption></figure></div>


<p>このデータを再現できるようにスコア関数を学習します。学習コードは以下の通りです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="train" data-lang="Python"><code>import torch

batch_size = 512
n_steps = 100000

dataset = torch.utils.data.TensorDataset((normalized_samples))
dataloader = torch.utils.data.DataLoader(dataset, batch_size=512, shuffle=True, num_workers=0)
dataloader_iter = iter(dataloader)

score_model = ScoreModel().to(device)

optimizer = torch.optim.Adam(score_model.parameters())
lr_scheduler = torch.optim.lr_scheduler.OneCycleLR(optimizer, max_lr=0.001, total_steps=n_steps)

for i in range(n_steps):
  try:
    x = next(dataloader_iter)[0]
  except StopIteration:
    dataloader_iter = iter(dataloader)
    x = next(dataloader_iter)[0]
  x = x.to(device)

  optimizer.zero_grad()
  loss = dsm_loss(score_model, x, sigmas)
  loss.backward()
  optimizer.step()
  lr_scheduler.step()
  if (i % 1000) == 0:
    print(f&quot;{i} steps loss:{loss}&quot;)</code></pre></div>



<p>学習が終わったら、以下のようにして学習したモデルを利用してサンプリングします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="sbm_samping" data-lang="Python"><code>samples_pred = sbm_sample(n_samples=100000, score_model=score_model, sigmas=sigmas)</code></pre></div>



<p>サンプリングされたデータの2Dのヒストグラムは以下の通りです。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="266" height="264" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/predicted_sample_density.png" alt="スコアベースモデルによるサンプリングデータの可視化結果" class="wp-image-2092" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/predicted_sample_density.png 266w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/predicted_sample_density-150x150.png 150w" sizes="auto, (max-width: 266px) 100vw, 266px" /><figcaption class="wp-element-caption">スコアベースモデルによるサンプリングデータの可視化結果</figcaption></figure></div>


<p>可視化結果をみると元の分布の平均の近くにデータが集中しているので、うまくいっていると考えられます。</p>



<p>ただ、やってみるとわかるのですがちゃんとした結果を得るために人手で決めないといけないハイパーパラメータの選択が難しい印象です。この結果もかなり試行錯誤してなんとかこの結果を作ることができたというイメージです。</p>



<h2 class="wp-block-heading">終わりに</h2>



<p>今回は「<a href="https://amzn.to/3SC3LMc" target="_blank" rel="noopener" title="拡散モデル　データ生成技術の数理">拡散モデル　データ生成技術の数理</a>」の2.2のスコアベースモデルの説明の部分のコードを書いたのでそのまとめの記事になります。最初、MNISTのデータでやろうとして、MNISTのデータを学習できるコードを説明するのは結構大変、ということでシンプルな混合ガウス分布にしました。ただ、それでも結構な分量になった印象です。ちなみに次のDDPMも紹介用のコードはできているので、近日中に記事を書いて公開しようと思います。</p>



<p>この記事が少しでもみなさんの理解の助けになれば幸いです。</p>



<h2 class="wp-block-heading">参考文献</h2>



<ol class="wp-block-list">
<li>Song, Y., &amp; Ermon, S. (2019). Generative Modeling by Estimating Gradients of the Data Distribution. ArXiv, abs/1907.05600.</li>



<li>Song, Y., &amp; Ermon, S. (2020). Improved Techniques for Training Score-Based Generative Models. ArXiv, abs/2006.09011.</li>



<li><a href="https://github.com/ermongroup/ncsnv2" target="_blank" rel="noopener" title="">https://github.com/ermongroup/ncsnv2</a></li>
</ol><p>The post <a href="https://www.mattari-benkyo-note.com/2023/03/08/diffusion_model_book_2_2/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 2.2 スコアベースモデル</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.mattari-benkyo-note.com/2023/03/08/diffusion_model_book_2_2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1932</post-id>	</item>
		<item>
		<title>[勉強ノート] 「拡散モデル　データ生成技術の数理」 1.5.1 ランジュバン・モンテカルロ法</title>
		<link>https://www.mattari-benkyo-note.com/2023/03/03/diffusion_model_book_1_5_1/</link>
					<comments>https://www.mattari-benkyo-note.com/2023/03/03/diffusion_model_book_1_5_1/#respond</comments>
		
		<dc:creator><![CDATA[Shuji Suzuki (shu)]]></dc:creator>
		<pubDate>Thu, 02 Mar 2023 22:20:32 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[勉強ノート]]></category>
		<category><![CDATA[拡散モデル]]></category>
		<category><![CDATA[統計]]></category>
		<guid isPermaLink="false">https://www.mattari-benkyo-note.com/?p=1944</guid>

					<description><![CDATA[<p>最近、先日紹介した「拡散モデル　データ生成技術の数理」をちゃんと理解するために数式を改めて追ったり、説明されているアルゴリズムを実装したりしています。 今回はその第１弾として「1.5.1 ランジュバン・モンテカルロ法」の [&#8230;]</p>
<p>The post <a href="https://www.mattari-benkyo-note.com/2023/03/03/diffusion_model_book_1_5_1/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 1.5.1 ランジュバン・モンテカルロ法</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>最近、先日紹介した「<a href="https://amzn.to/3SC3LMc" target="_blank" rel="noreferrer noopener">拡散モデル　データ生成技術の数理</a>」をちゃんと理解するために数式を改めて追ったり、説明されているアルゴリズムを実装したりしています。</p>



<p>今回はその第１弾として「1.5.1 ランジュバン・モンテカルロ法」の部分で紹介されているランジュバン・モンテカルロ法を実装をして動かすとどうなるのか？を試してみたので、そのまとめの記事になります。</p>



<p>今回示しているコードはここに上がっています。</p>



<p><a href="https://github.com/shu65/diffusion-model-book/blob/main/diffusion_model_book_1_5_1_langevin_monte_carlo.ipynb">https://github.com/shu65/diffusion-model-book/blob/main/diffusion_model_book_1_5_1_langevin_monte_carlo.ipynb</a></p>



<p>また、この本を買うか迷っている方はこちらの記事に私が読んだ感想を書いてますので参考にしてみてください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-まったり勉強ノート wp-block-embed-まったり勉強ノート"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="4Swnv3yqlL"><a href="https://www.mattari-benkyo-note.com/2023/02/23/diffusion_model_book_review/">[書評] 拡散モデル データ生成技術の数理 ー 目覚ましい画像生成の発展の裏側を知りたい人へ</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;[書評] 拡散モデル データ生成技術の数理 ー 目覚ましい画像生成の発展の裏側を知りたい人へ&#8221; &#8212; まったり勉強ノート" src="https://www.mattari-benkyo-note.com/2023/02/23/diffusion_model_book_review/embed/#?secret=94fgig6sJO#?secret=4Swnv3yqlL" data-secret="4Swnv3yqlL" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<h2 class="wp-block-heading">ランジュバン・モンテカルロ法とは？</h2>



<p>ランジュバン・モンテカルロ法は拡散モデルで登場するMCMC法の１つであり、 \(p(\boldsymbol{x})\)のスコアと呼ばれるものが計算できれば\(p(\boldsymbol{x})\)からサンプリングしたものに近い\(\boldsymbol{x}\)が得られる手法です。</p>



<p>ランジュバン・モンテカルロ法は拡散モデルを学習後、生成のフェーズにおいて使われるので拡散モデルを理解するうえでランジュバン・モンテカルロ法は重要な手法です。</p>



<p>このランジュバン・モンテカルロ法の疑似コードは以下の通りです。(「拡散モデル　データ生成技術の数理」Algorithm 1.1の引用)</p>



<ol class="wp-block-list">
<li>\(\boldsymbol{x}_0\)を初期化(\(\boldsymbol{x}_0 \sim \mathcal{N}(0, \boldsymbol{I})\))</li>



<li>for \(k=1,&#8230;,K\) do</li>



<li>\(\quad \boldsymbol{u}_k\ \sim \mathcal{N}(0, \boldsymbol{I})\)</li>



<li>\(\quad \boldsymbol{x}_k\ := \boldsymbol{x}_{k-1} + \alpha \nabla_{\boldsymbol{x}}\log p(\boldsymbol{x}_{k-1}) + \sqrt{2 \alpha}\boldsymbol{u}_k\)</li>



<li>end for</li>



<li>return \(\boldsymbol{x}_K\)</li>
</ol>



<p>ここで、\(\alpha\)はステップ幅、\(K\)はステップ回数、\(p(\boldsymbol{x})\)が\(\boldsymbol{x}\)の確率密度関数です。また、\(\nabla_{\boldsymbol{x}}\log p(\boldsymbol{x}) \)が\(\boldsymbol{x}\)に対するスコアです。</p>



<p>疑似コードを見ていただければわかる通り、最初、ランダムに\(\boldsymbol{x}_0\)を生成後、以下のランジュバン・モンテカルロ法の更新則を\(K\)回繰り返すことで\(p(\boldsymbol{x})\)からサンプリングしたようなデータを作ります。</p>



<p>$$ \begin{align*}<br>\boldsymbol{x}_k := \boldsymbol{x}_{k-1} + \alpha \nabla_\boldsymbol{x} \log p(\boldsymbol{x}_{k-1}) + \sqrt{2\alpha}\boldsymbol{u}_k \\<br>\end{align*} $$</p>



<h2 class="wp-block-heading">Pythonでランジュバン・モンテカルロ法を実装する</h2>



<p>ここからPythonでランジュバン・モンテカルロ法を実装して実際に動かした様子を見ていきます。</p>



<p>まずは実装に関してです。ここではスコア(\(\nabla_{\boldsymbol{x}}\log p(\boldsymbol{x}) \))を簡単に計算するために深層学習ライブラリのPyTorchを利用します。PyTorchには自動微分の機能がありこれにより\(\nabla\)が簡単に計算することができます。</p>



<p>先ほど示したアルゴリズムをそのままPyTorchで実装すると以下のようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="langevin_monte_carlo_algorithm" data-lang="Python"><code>def langevin_monte_carlo_algorithm(log_p_dist, n_samples=100000, alpha=0.001, K=1000):
    x0 = torch.randn(n_samples, 2)
    x_k = x0
    for i in tqdm(range(K+1)):
        x_k.requires_grad_()
        log_p = log_p_dist(x_k)
        score = torch.autograd.grad(log_p.sum(), x_k)[0]
        with torch.no_grad():
          u_k = torch.randn(n_samples, 2)
          x_k = x_k + alpha * score + np.sqrt(2 * alpha) * u_k
    return x_k</code></pre></div>



<p>ここで<code>log_p_dist</code>はサンプリングしたい分布の確率密度関数の出力を対数にしたものを返す関数です。後ほど具体例を示しますが、PyTorchで\(\nabla\)を計算したいので<code>log_p_dist</code>は自動微分が計算できるPyTorchの関数だけで計算する関数である必要があります。</p>



<p>また、<code>x_k</code>は自動微分により\(\nabla\)を計算する必要があるので<code>x_k.requires_grad_()</code>として、<code>torch.autograd.grad()</code>を呼んだときが自動微分の結果が入るようにしておきます。これに加えて実際に自動微分を計算する際にPyTorchの制約上、<code>torch.autograd.grad()</code>のoutputs（ここでは<code>log_p.sum()</code>のところ）がスカラである必要があります。このため、そのまま<code>log_p</code>を<code>torch.autograd.grad()</code>に引数で渡すとエラーになってしまうため、<code>log_p.sum()</code>をでスカラにしてから<code>torch.autograd.grad()</code>の引数にいれています。</p>



<h2 class="wp-block-heading">Pythonで実装したランジュバン・モンテカルロ法</h2>



<p>次に先ほど示した実装を動かしてみます。ここでサンプリングする分布の確率密度関数は以下のように平均が違うガウス分布二つの混合分布としました。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="log_p_dist" data-lang="Python"><code>def log_p_dist(x):
  dist0 = torch.distributions.MultivariateNormal(torch.tensor([-2, -2]), torch.eye(2))
  p0 = torch.exp(dist0.log_prob(x))
  dist1 = torch.distributions.MultivariateNormal(torch.tensor([2, 2]), torch.eye(2))
  p1 = torch.exp(dist1.log_prob(x))
  return torch.log((p0 + p1)/2.0)</code></pre></div>



<p>確率密度関数を可視化してみると以下のようになります。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="253" height="248" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/density.png" alt="p(x)の確率密度関数" class="wp-image-1958"/><figcaption class="wp-element-caption">p(x)の確率密度関数</figcaption></figure></div>


<p>次にランジュバン・モンテカルロ法を使ってサンプリングしてみます。実行方法としては以下の通りです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="run_langevin_monte_carlo_algorithm" data-lang="Python"><code>samples_1em1 = langevin_monte_carlo_algorithm(log_p_dist, alpha=1e-1)</code></pre></div>



<p>これでヒストグラムを描くと以下のようになります。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="253" height="248" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/pred_density0.png" alt="サンプリングしたデータのヒストグラム" class="wp-image-1959"/><figcaption class="wp-element-caption">サンプリングしたデータのヒストグラム</figcaption></figure></div>


<p>図を見ていただければわかる通り、確率密度関数に近いヒストグラムを得ることができていることがわかります。</p>



<p>ここまでできたので、折角なので２章あたりで指摘される問題点の１つである\(\alpha\)の値の設定によってうまくサンプリングできない例を確認してみます。</p>



<p>具体的には\(\alpha\)を以下のように極端に小さくして実行してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-file="run_langevin_monte_carlo_algorithm2" data-lang="Python"><code>samples_1em5 = langevin_monte_carlo_algorithm(log_p_dist, alpha=1e-5)</code></pre></div>



<p>ヒストグラムを描くとこのようになります。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="253" height="248" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/03/pred_density1.png" alt="αを小さくしてサンプリングしたデータのヒストグラム" class="wp-image-1960"/><figcaption class="wp-element-caption">\(\alpha\)を小さくしてサンプリングしたデータのヒストグラム</figcaption></figure></div>


<p>\(\alpha\)の値を変な値にすると入力した確率密度関数とは全く違う分布になってしまうことがわかりました。これで２章の説明の重要性を実感することができました。</p>



<h2 class="wp-block-heading">終わり</h2>



<p>今回はランジュバン・モンテカルロ法の解説とPythonの実装を示しました。今回の章は比較的簡単に実装できました。ただ、このあと紹介する予定の部分は説明を聞くと簡単そうですが、実装するのは大変な部分が多い印象です。ですが、頑張って紹介できればと思っています。</p><p>The post <a href="https://www.mattari-benkyo-note.com/2023/03/03/diffusion_model_book_1_5_1/">[勉強ノート] 「拡散モデル　データ生成技術の数理」 1.5.1 ランジュバン・モンテカルロ法</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.mattari-benkyo-note.com/2023/03/03/diffusion_model_book_1_5_1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1944</post-id>	</item>
		<item>
		<title>[勉強ノート] 入門 統計的因果推論 反事実における直接効果と間接効果、媒介公式の導出 (4.5.2 媒介についてのツール)</title>
		<link>https://www.mattari-benkyo-note.com/2023/01/17/causal-inference-in-statistics-a-primer-4-5-2/</link>
					<comments>https://www.mattari-benkyo-note.com/2023/01/17/causal-inference-in-statistics-a-primer-4-5-2/#respond</comments>
		
		<dc:creator><![CDATA[Shuji Suzuki (shu)]]></dc:creator>
		<pubDate>Mon, 16 Jan 2023 21:08:14 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[統計的因果推論]]></category>
		<guid isPermaLink="false">https://www.mattari-benkyo-note.com/?p=1660</guid>

					<description><![CDATA[<p>今回の記事は入門 統計的因果推論 の4.5.2に書かれている「反事実における直接効果と間接効果の定義」、「自然な効果を識別するための条件」を中心にここで説明されている直接効果、間接効果の定義からdo演算子を使わない媒介公 [&#8230;]</p>
<p>The post <a href="https://www.mattari-benkyo-note.com/2023/01/17/causal-inference-in-statistics-a-primer-4-5-2/">[勉強ノート] 入門 統計的因果推論 反事実における直接効果と間接効果、媒介公式の導出 (4.5.2 媒介についてのツール)</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>今回の記事は<a href="https://www.amazon.co.jp/%E5%85%A5%E9%96%80-%E7%B5%B1%E8%A8%88%E7%9A%84%E5%9B%A0%E6%9E%9C%E6%8E%A8%E8%AB%96-Judea-Pearl/dp/4254122411">入門 統計的因果推論</a> の4.5.2に書かれている「反事実における直接効果と間接効果の定義」、「自然な効果を識別するための条件」を中心にここで説明されている直接効果、間接効果の定義からdo演算子を使わない媒介公式などの式の導出について説明していきます。</p>



<p>この部分も私はぱっと読んで意味がわからなくて苦労した点なので、自分であとで見返してもわかるように丁寧な説明を心がけて書いていこうと思います。</p>



<h2 class="wp-block-heading">想定する因果グラフ</h2>



<p>この記事で想定している因果グラフは以下の通りです。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="670" height="435" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/graph.png" alt="" class="wp-image-1743" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/graph.png 670w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/graph-300x195.png 300w" sizes="auto, (max-width: 670px) 100vw, 670px" /><figcaption class="wp-element-caption">因果グラフ</figcaption></figure></div>


<p>本では媒介公式の式導出の部分（自然な効果を識別するための条件の節）で\(W\)として抽象的な変数を使ってまとめています。この記事でも基本同様に\(W\)でまとめていますが、この因果グラフでは\(W_1, W_2, W_3\)と具体的にして分けています。</p>



<h2 class="wp-block-heading">直接効果と間接効果の定義</h2>



<p>まずはこれらの定義がどういうものかを見ていきます。本に書かれている定義は以下の通りです。</p>



<h3 class="wp-block-heading">総合効果TE (total effect)</h3>



<p>$$ \begin{align*}<br>TE &amp;= E[Y_1 &#8211; Y_0] \\<br>&amp;=E[Y|do(T=1) &#8211; E[Y|do(T=0)]]\tag{4.44}<br>\end{align*} $$</p>



<p>ここで\(Y_x\)は本ででてくる表記で\(X=x\)の場合の\(Y\)を\(Y_x\)ということを表しています。具体的には本の4.1の「反事実」の例で下道を使った場合とフリーウェイを使った場合の運転時間の例で説明します。このとき、フリーフェイを使うケースを\(T=1\)とするとこの時の運転時間\(Y\)を\(Y_{T=1}\)、\(T\)が自明な時は\(Y_1\)ということを表しています。一方、下道を使った場合\(T=0\)の運転時間は\(Y_{T=0}\)または\(Y_0\)です。</p>



<p>このTEは処置\(T=0\)から\(T=1\)へ変化したときの\(Y\)の増加量です。重要な点として媒介変数\(M\)は\(T\)が変化するにつれて変化します。</p>



<h3 class="wp-block-heading">制御された直接効果CDE (controlled direct effect)</h3>



<p>$$ \begin{align*}<br>CDE(m) &amp;= E[Y_{1,m} &#8211; Y_{0,m}] \\<br>&amp;=E[Y|do(T=1, M=m)] &#8211; E[Y|do(T=0, M=m)]\tag{4.45}<br>\end{align*} $$</p>



<p>\(Y_{1,m}\)の部分は省略されていますが、\(Y_{T=1, M=m}\)の意味です。基本的には統合効果のときに説明したときとほぼ同じで、ここでは\(T\)だけでなく\(M\)についても固定した状態の\(Y\)の値を示しています。</p>



<p>このCDEは処置\(T=0\)から\(T=1\)への変化したときのYの増加量の期待値ですが、重要な点として媒介変数\(M\)は\(M=m\)で一律に設定されています。</p>



<h3 class="wp-block-heading">自然な直接効果NDE (natural direct effect)</h3>



<p>$$ \begin{align*}<br>NDE &amp;= E[Y_{1,M_0} &#8211; Y_{0,M_0}] \tag{4.46}<br>\end{align*} $$</p>



<p>このNDEは処置が\(T=0\)から\(T=1\)へ変化したときの\(Y\)の増加量の期待値ですが、重要な点として媒介変数は変化前の状態、つまりT=0においてそれぞれの個体がとったであろう値(\(M_0\))に固定されています。この\(M_0\)は\(M_{T=0}\)を表していて、\(M\)が\(T=0\)のときの値を示しています。この媒介変数の値が一律で固定されているケースがCDEで、変化前の状態で個別にとったであろう値に固定されているのがNDEになります。</p>



<h3 class="wp-block-heading">自然な間接効果NIE (natural indirect effect)</h3>



<p>$$ \begin{align*}<br>NIE &amp;= E[Y_{0,M_1} &#8211; Y_{0,M_0}] \tag{4.47}<br>\end{align*} $$</p>



<p>このNIEでは処置が\(T=0\)で固定されているときのYの増加量の期待値です。このとき媒介変数\(M\)は\(T=1\)においてそれぞれの個体がとったであろう値に変化させます。よって、\(Y\)が\(T\)で反応しないようにしたうえで媒介変数によって変化する量を表しています。</p>



<h2 class="wp-block-heading">NDEとNIEを識別する十分条件 (自然な効果を識別するための条件)</h2>



<p>先ほどのNDEとNIEまで計算するための十分条件として本には以下のように書かれています。</p>



<ol class="wp-block-list">
<li>\(W\) の要素(最初の因果グラフでは\(W_1, W_2, W_3\))には\(T\)の子孫が一つもない</li>



<li>\(W\) は(\(T\rightarrow M\)と\(T\rightarrow Y\)を除いた)\(M\)から\(Y\)へのバックドアパスをすべてブロックする</li>



<li>\(T\)から\(M\)への特定\(W\)同時効果は(おそらく実験か調整により)識別可能である</li>



<li>\(\{T, M\}\)から\(Y\)への特定\(W\)同時効果は(おそらく実験か調整により)識別可能である</li>
</ol>



<p>ここで\(W\)は因果グラフにおける\(\{W_1, W_2, W_3\}\)をまとめた変数になります。</p>



<p>これらの条件は言葉で言わんとしていることはわかるきがしますが、これを使って私はNDEとNIEの媒介公式を導出できるきがしませんでした。このため、別の表現がないかな？ということで探すと、別の論文[1]に別の表現の条件が書かれていたので今回はこの条件を使って証明していきます。</p>



<p>まず、一致性 (consistency assumption) と構成性 (composition assumption)という以下の仮定が成り立つとします。</p>



<ul class="wp-block-list">
<li>一致性: \(T=t\)と\(M=m\)が条件付けされたとき\(Y=Y_{t, m}\)が成り立つ。同様に\(T=t\)が条件付けされたとき\(M=M_t\)が成り立つ</li>



<li>構成性: \(T=t\)が条件付けされたとき\(Y(t) = Y_{t, M(t)}\)が成り立つ</li>
</ul>



<p>そしてNDEとNIEが識別可能とする十分条件として以下のものがあるとしています。</p>



<p>$$ \begin{align*}<br>Y_{t, m} &amp; \perp\kern-5pt\perp T \mid W &amp; \forall t, m \tag{A-1} \\<br>Y_{t, m} &amp; \perp\kern-5pt\perp M \mid T, W &amp; \forall t, m \tag{A-2} \\<br>M_t &amp; \perp\kern-5pt\perp T \mid W &amp; \forall t \tag{A-3} \\<br>Y_{t, m} &amp; \perp\kern-5pt\perp M_{t^{\star}} \mid W &amp; \forall t, t^{\star}, m \tag{A-4} \\<br>\end{align*} $$</p>



<p>変数に関しては今回の因果グラフに合わせて元論文から変更しています。</p>



<h2 class="wp-block-heading">各効果の定義から式変形していく</h2>



<p>ここから本では省略されている式変形をしていって、観測データから計算できる形に式を持っていきたいと思います。定義では期待値の形で書かれていますが、確率がわかれば十分だと思うので、確率の形で式変形していきます。TEに関しては３章で示されているdo演算子を使った場合の式変形を行えば目的の式まで変形できますが、他の効果の定義に合わせて先ほどの仮定と条件を使って式変形していきます。</p>



<p>ちなみに３章で示されているdo演算子を使った場合の式変形はこちらで詳しく書いていますので気になる方は見てください。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-まったり勉強ノート wp-block-embed-まったり勉強ノート"><div class="wp-block-embed__wrapper">
<blockquote class="wp-embedded-content" data-secret="qNslsOgKlm"><a href="https://www.mattari-benkyo-note.com/2023/01/12/causal-inference-in-statistics-a-primer-chapter-3/">[勉強ノート] 入門 統計的因果推論 3章 介入効果　</a></blockquote><iframe loading="lazy" class="wp-embedded-content" sandbox="allow-scripts" security="restricted"  title="&#8220;[勉強ノート] 入門 統計的因果推論 3章 介入効果　&#8221; &#8212; まったり勉強ノート" src="https://www.mattari-benkyo-note.com/2023/01/12/causal-inference-in-statistics-a-primer-chapter-3/embed/#?secret=YYmXEzwfEY#?secret=qNslsOgKlm" data-secret="qNslsOgKlm" width="600" height="338" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
</div></figure>



<h3 class="wp-block-heading">TE</h3>



<p>TEの定義は以下の通りです。</p>



<p>$$ \begin{align*}<br>TE &amp;= E[Y_1 &#8211; Y_0] \\<br>&amp;=E[Y|do(T=1)] &#8211; E[Y|do(T=0)]]\tag{4.44}<br>\end{align*} $$</p>



<p>ここで\(P(Y|do(X))\)からdo演算子のない形にするというのでもいいのですが、先ほどの仮定と条件を使うために\(Y_1, Y_0\)から式変形していきます。ここで\(Y_1, Y_0\)をまとめて\(Y_t\)として計算していきます。</p>



<p>最終的には以下のような式になることを示します。</p>



<p>$$ \begin{align*}<br>P(Y_t) &amp;= \sum_w P(Y|T=t, W=w)P(W=w) \tag{4.44.1}<br>\end{align*} $$</p>



<p>まず、構成性から以下の式に変形できます。</p>



<p>$$ \begin{align*}<br>P(Y_t) &amp;= P(Y_{t, M_t}) \tag{4.44.2}<br>\end{align*} $$</p>



<p>ここで、確率の周辺化で以下の式が成り立つことを利用します。</p>



<p>$$ \begin{align*} <br>P(Y) =&amp; \sum_x P(Y, X=x) \tag{4.44.3} \\<br>\end{align*} $$</p>



<p><br>この周辺化の式を使って\(W\)と\(M_t\)の同時確率の式に変形します。そして、その後、\(W\)と\(M_t\)の条件つき確率の形にもっていきます。</p>



<p>$$ \begin{align*}<br>P(Y_t) =&amp; P(Y_{t, M_t}) \\<br>=&amp; \sum_w P(Y_{t, M_t}, W=w) \\<br>=&amp; \sum_w \sum_m P(Y_{t, M_t}, M_t=m, W=w) \\<br>=&amp; \sum_w \sum_m P(Y_{t, M_t}, M_t=m|W=w)P(W=w) \\<br>=&amp; \sum_w \sum_m P(Y_{t, M_t}| M_t=m, W=w)\\<br>&amp; \qquad P(M_t=m|W=w)P(W=w) \tag{4.44.4}<br>\end{align*} $$</p>



<p>ここで\(M_t=m\)を利用すると以下のように変形できます。</p>



<p>$$ \begin{align*}<br>P(Y_{t, M_t}| M_t=m, W=w) &amp;= P(Y_{t, m}| M_t=m, W=w) \tag{4.44.5}<br>\end{align*} $$</p>



<p>次に十分条件の中のA-1を利用すると式(4.44.5)は\(T=t\)を使った条件付き確率に変形できます。</p>



<p>$$ \begin{align*}<br>P(Y_{t, m}| M_t=m, W=w) &amp;= P(Y_{t, m}| M_t=m, T=t, W=w) \tag{4.44.6}<br>\end{align*} $$</p>



<p>そして一致性を使うと\(P(Y_{t, m}| M_t=m, W=w)\)は以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y_{t, m}| M_t=m, T=t, W=w) &amp;= P(Y| M_t=m, T=t, W=w) \tag{4.44.7}<br>\end{align*} $$</p>



<p>よって式(4.44.5)から(4.44.7)を利用すると式(4.44.4)は以下のように変形できます。</p>



<p>$$ \begin{align*}<br>P(Y_t) =&amp; \sum_w \sum_m P(Y_{t, M_t}| M_t=m, W=w) \\<br>&amp; \qquad P(M_t=m|W=w)P(W=w) \\<br>=&amp; \sum_w \sum_m P(Y_{t, m}| M_t=m, W=w) \\<br>&amp; \qquad P(M_t=m|W=w)P(W=w) \\<br>=&amp; \sum_w \sum_m P(Y_{t, m}| M_t=m, T=t, W=w)\\<br>&amp; \qquad P(M_t=m|W=w)P(W=w) \\<br>=&amp; \sum_w \sum_m P(Y| M_t=m, T=t, W=w)\\<br>&amp; \qquad P(M_t=m|W=w)P(W=w) \tag{4.44.8}<br>\end{align*} $$</p>



<p>最後に\(M_t=m\)の条件付き確率を同時確率の形に戻して、周辺化を適用して\(M_t=m\)の部分を取り除くと以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y_t) =&amp; \sum_w \sum_m P(Y| M_t=m, T=t, W=w)\\<br>&amp; \qquad P(M_t=m|W=w)P(W=w) \\<br>=&amp; \sum_w \sum_m P(Y, M_t=m| T=t, W=w)P(W=w) \\<br>=&amp; \sum_w P(Y| T=t, W=w)P(W=w) \tag{4.44.9}<br>\end{align*} $$</p>



<p>これで求めたい式(4.44.1)が導出できました。</p>



<h3 class="wp-block-heading">CDE</h3>



<p>次にCDEについても式変形していきます。CDEの定義は以下の通りです。</p>



<p>$$ \begin{align*}<br>CDE(m) &amp;= E[Y_{1,m} &#8211; Y_{0,m}] \\<br>&amp;=E[Y|do(T=1, M=m)] &#8211; E[Y|do(T=0, M=m)]\tag{4.45}<br>\end{align*} $$</p>



<p>これをTEのときと同じようにdo演算子がない状態に\(Y_{1,m}\)と\(Y_{0,m}\)を式変形していきたいと思います。\(Y_{1,m}\)と\(Y_{0,m}\)をまとめて\(Y_{t,m}\)という形で式変形していきます。</p>



<p>CDEの場合は最終的に以下の式の導出を目指します。</p>



<p>$$ \begin{align*}<br>P(Y_{t,m}) &amp;= \sum_w P(Y|M=m, T=t, W=w)P(W=w) \tag{4.45.1}<br>\end{align*} $$</p>



<p>それでは\(P(Y_{t,m})\)を周辺化の式を使って\(W\)の同時確率の形にして、その後\(W\)の条件付き確率の形にします。</p>



<p>$$ \begin{align*}<br>P(Y_{t,m}) &amp;= \sum_w P(Y_{t,m}, W=w) \\<br>&amp;= \sum_w P(Y_{t,m}|W=w)P(W=w)\tag{4.45.2}<br>\end{align*} $$</p>



<p>次に\(P(Y_{t,m}|W=w)\)に注目するとA-1の条件から\(W\)が与えられると\(Y_{t,m}\)と\(T\)は独立なため、\(P(Y_{t,m}|W=w)\)を\(T=t\)の条件付き確率にできます。</p>



<p>$$ \begin{align*}<br>P(Y_{t,m}|W=w) &amp;= P(Y_{t,m}|T=t, W=w) \tag{4.45.3}<br>\end{align*} $$</p>



<p>さらにA-2の条件から\(W\)と\(T\)が与えられると\(Y_{t,m}\)と\(M\)は独立なため、\(P(Y_{t,m}|T=t, W=w)\)を\(M=m\)の条件付き確率にできます。</p>



<p>$$ \begin{align*}<br>P(Y_{t,m}|T=t, W=w) &amp;= P(Y_{t,m}|M=m, T=t, W=w) \tag{4.45.4}<br>\end{align*} $$</p>



<p>ここで一致性から以下のように変形できます。</p>



<p>$$ \begin{align*}<br>P(Y_{t,m}|M=m, T=t, W=w) &amp;= P(Y|M=m, T=t, W=w)\tag{4.45.5}<br>\end{align*} $$</p>



<p>最後に式(4.45.2)を式(4.45.3)から式(4.45.5)を利用して変形していきます。</p>



<p>$$ \begin{align*}<br>P(Y_{t,m}) &amp;= \sum_w P(Y_{t,m}, W=w) \\<br>&amp;= \sum_w P(Y_{t,m}|W=w)P(W=w) \\<br>&amp;= \sum_w P(Y_{t,m}|T=t, W=w)P(W=w) \\<br>&amp;= \sum_w P(Y_{t,m}|M=m, T=t, W=w)P(W=w) \\<br>&amp;= \sum_w P(Y|M=m, T=t, W=w)P(W=w) \tag{4.45.6}<br>\end{align*} $$</p>



<p>以上でCDEのほうも導出することができました。</p>



<h3 class="wp-block-heading">NDEとNIE</h3>



<p>最後にNDEとNIEです。それぞれ以下のような定義になっています。</p>



<p>$$ \begin{align*}<br>NDE &amp;= E[Y_{1,M_0} &#8211; Y_{0,M_0}] \tag{4.46} \\<br>NIE &amp;= E[Y_{0,M_1} &#8211; Y_{0,M_0}] \tag{4.47} \\<br>\end{align*} $$</p>



<p>これは\(Y_{1,M_0}, Y_{0,M_0}, Y_{0,M_1}, Y_{0,M_0}\)の４種類の確率が分かればよいことがわかります。これらの変数をまとめて\(Y_{t_y,M_{t_m}}\)としてこの後まとめて式変形していきます。最終的には以下の式に変形することを目指します。</p>



<p>$$ \begin{align*}<br>P(Y_{t_y,M_{t_m}}) =&amp; \sum_w \sum_m P(Y|M=m, T=t_y, W=w)\\<br>&amp; \qquad P(M|T=t_m, W=w)P(W=w) \tag{4.46.1}<br>\end{align*} $$</p>



<p>まずは\(W\)の同時確率の形にして、その後\(W\)の条件付き確率の形に変形します。</p>



<p>$$ \begin{align*}<br>P(Y_{t_y,M_{t_m}}) &amp;= \sum_w P(Y_{t_y,M_{t_m}}, W=w) \\<br>&amp;= \sum_w P(Y_{t_y,M_{t_m}}|W=w)P(W=w) \tag{4.46.2}<br>\end{align*} $$</p>



<p>次に\(P(Y_{t_y,M_{t_m}}|W=w)\)の部分に注目して\(M_{t_m}\)に関しても同様に周辺確率の形にしてその後\(M_{t_m}\)の条件付き確率の形に変形します。</p>



<p>$$ \begin{align*}<br>P(Y_{t_y,M_{t_m}}|W=w) &amp;= \sum_m P(Y_{t_y,M_{t_m}}, M_{t_m}=m|W) \\<br>&amp;= \sum_m P(Y_{t_y,M_{t_m}}|M_{t_m}=m, W=w)P(M_{t_m}=m|W) \tag{4.46.3}<br>\end{align*} $$</p>



<p>ここで\(M_{t_m}=m\)を利用すると以下のように変形できます。</p>



<p>$$ \begin{align*}<br>P(Y_{t_y,M_{t_m}}|W=w) &amp;= \sum_m P(Y_{t_y,M_{t_m}}|M_{t_m}=m, W=w)P(M_{t_m}=m|W) \\<br>&amp;= \sum_m P(Y_{t_y,m}|M_{t_m}=m, W=w)P(M_{t_m}=m|W) \tag{4.46.4}<br>\end{align*} $$</p>



<p>ここから\(P(M_{t_m}|W)\)の部分の式変形をしていきます。十分条件のA-3から\(W\)が条件付けされたとき、\(M_t\)と\(T\)は独立なので以下が成り立ちます。</p>



<p>$$ \begin{align*}<br>P(M_{t_m}|W) &amp;= P(M_{t_m}|T=t_m, W) \tag{4.46.5}<br>\end{align*} $$</p>



<p>そして一致性から以下のようになります。</p>



<p>$$ \begin{align*}<br>P(M_{t_m}|W) &amp;= P(M_{t_m}|T=t_m, W) \\<br>&amp;= P(M|T=t_m, W) \tag{4.46.6}<br>\end{align*} $$</p>



<p>次に式(4.46.4)の\(P(Y_{t_y,m}|M_{t_m}=m, W)\)も式変形していきます。十分条件のA-4を利用すると\(W\)が条件付けされたとき、\(Y_{t_y,m}\)と\(M_{t_m}\)は独立なので以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y_{t_y,m}|M_{t_m}=m, W) &amp;= P(Y_{t_y,m}|W) \tag{4.46.7}<br>\end{align*} $$</p>



<p>そして十分条件のA-1を使うと\(W\)が条件付けされたとき、\(Y_{t_y,m}\)と\(T\)は独立なので以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y_{t_y,m}|W=w) &amp;= P(Y_{t_y,m}|T=t_y, W) \tag{4.46.8}<br>\end{align*} $$</p>



<p>同様に十分条件のA-2を使うと\(T\)と\(W\)が条件付けされたとき、\(Y_{t_y,m}\)と\(M\)は独立なので以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y_{t_y,m}|T=t_y, W) &amp;= P(Y_{t_y,m}|M=m, T=t_y, W)\tag{4.46.9}<br>\end{align*} $$</p>



<p>ここで一致性から以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y_{t_y,m}|M=m, T=t_y, W) &amp;= P(Y|M=m, T=t_y, W) \tag{4.46.10}<br>\end{align*} $$</p>



<p>式(4.46.7)から(4.46.10)までを利用すると最終的に以下のような関係が成り立ちます。</p>



<p>$$ \begin{align*}<br>P(Y_{t_y,m}|M_{t_m}=m, W) &amp;= P(Y|M=m, T=t_y, W) \tag{4.46.11}<br>\end{align*} $$</p>



<p>式(4.46.6)と式(4.46.11)を使うと式(4.46.4)は以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y_{t_y,M_{t_m}}|W=w) =&amp; \sum_m P(Y_{t_y,M_{t_m}}|M_{t_m}=m, W=w)\\<br>&amp; \qquad P(M_{t_m}=m|W) \\<br>=&amp; \sum_m P(Y_{t_y,m}|M_{t_m}=m, W=w)\\<br>&amp; \qquad P(M|T=t_m, W) \\<br>=&amp; \sum_m P(Y|M=m, T=t_y, W)\\<br>&amp; \qquad P(M|T=t_m, W) \tag{4.46.12}<br>\end{align*} $$</p>



<p>最終的に式(4.46.12)を使うと式(4.46.2)は以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y_{t_y,M_{t_m}}) =&amp; \sum_w P(Y_{t_y,M_{t_m}}, W=w) \\<br>=&amp; \sum_w P(Y_{t_y,M_{t_m}}|W=w)P(W=w) \\<br>=&amp; \sum_w \sum_m P(Y|M=m, T=t_y, W=w)\\<br>&amp; \qquad P(M|T=t_m, W=w)P(W=w) \tag{4.46.13}<br>\end{align*} $$</p>



<p>これで求めたい式(4.46.1)の導出ができました。</p>



<h2 class="wp-block-heading">終わりに</h2>



<p>今回の記事は入門 統計的因果推論 の4.5.2に書かれているTE, CDE, NDE, NIEについて式変形をしていきました。一度理解してblogにかけそうと思ってからいざ書き始めたら、blogの記事を書く中でところどころ自分の理解が甘い部分が発見できました。このためblogの記事を書くことで自分の理解の再確認ができて非常に有意義でした。</p>



<p>他にもわからない部分がいくつかまだあるので、機会があれば勉強のために記事にしていきたいと思います。</p>



<h2 class="wp-block-heading">参考文献</h2>



<ol class="wp-block-list">
<li>VanderWeele, Tyler J. and Stijn Vansteelandt. “Conceptual issues concerning mediation, interventions and composition.”&nbsp;<em>Statistics and Its Interface</em>&nbsp;2 (2009): 457-468.</li>



<li></li>
</ol>



<p></p><p>The post <a href="https://www.mattari-benkyo-note.com/2023/01/17/causal-inference-in-statistics-a-primer-4-5-2/">[勉強ノート] 入門 統計的因果推論 反事実における直接効果と間接効果、媒介公式の導出 (4.5.2 媒介についてのツール)</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.mattari-benkyo-note.com/2023/01/17/causal-inference-in-statistics-a-primer-4-5-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1660</post-id>	</item>
		<item>
		<title>[勉強ノート] 入門 統計的因果推論 3章 介入効果　</title>
		<link>https://www.mattari-benkyo-note.com/2023/01/12/causal-inference-in-statistics-a-primer-chapter-3/</link>
					<comments>https://www.mattari-benkyo-note.com/2023/01/12/causal-inference-in-statistics-a-primer-chapter-3/#respond</comments>
		
		<dc:creator><![CDATA[Shuji Suzuki (shu)]]></dc:creator>
		<pubDate>Wed, 11 Jan 2023 23:04:46 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<category><![CDATA[統計的因果推論]]></category>
		<guid isPermaLink="false">https://www.mattari-benkyo-note.com/?p=1538</guid>

					<description><![CDATA[<p>今回の記事は入門 統計的因果推論 の３章の部分の数式の変形等、ぱっと読んで分かりづらくて時間をかけて考えてしまった点を中心にあとから自分で見返してわかるように数式の変形を説明した記事になります。 前提として「入門 統計的 [&#8230;]</p>
<p>The post <a href="https://www.mattari-benkyo-note.com/2023/01/12/causal-inference-in-statistics-a-primer-chapter-3/">[勉強ノート] 入門 統計的因果推論 3章 介入効果　</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>今回の記事は<a href="https://amzn.to/3kALySA" target="_blank" rel="noopener" title="">入門 統計的因果推論</a> の３章の部分の数式の変形等、ぱっと読んで分かりづらくて時間をかけて考えてしまった点を中心にあとから自分で見返してわかるように数式の変形を説明した記事になります。</p>



<p>前提として「入門 統計的因果推論」で事前に説明された用語に関して、わかりやすくて説明が不要な部分は説明せずに使っているので、この記事だけではおそらく内容がわからない部分もあるかもしれませんがご了承ください。</p>



<h2 class="wp-block-heading">調整化公式の導出 (3.2 調整)</h2>



<p>まず、新薬の効果を表す問題を考えます。考える因果グラフは以下の通り。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="667" height="278" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/drug.png" alt="" class="wp-image-1612" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/drug.png 667w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/drug-300x125.png 300w" sizes="auto, (max-width: 667px) 100vw, 667px" /><figcaption class="wp-element-caption">図 3.1 新薬効果の因果グラフ</figcaption></figure></div>


<p>この問題において以下の平均因果効果（ACE: average causal effect）が知りたいことです。</p>



<p>$$ \begin{align*} <br>ACE=P(Y = 1 |  do(X = 1)) &#8211; P(Y = 1 |  do(X = 0)) <br>\end{align*} $$</p>



<p>この式から\( P(Y|  do(X)) \) の確率を観測データから計算できればACEの計算ができることがわかります。このため、これ以降は\( P(Y|  do(X)) \)を観測データから計算する方法について説明していきます。具体的には以下の形に変形することを目指します。</p>



<p>$$ \begin{align*}<br>P(Y | do(X)) &amp;= \sum_z P(Y|X, Z=z)P(Z=z) \\<br>\tag{3.1}<br>\end{align*} $$</p>



<p>この式が調整化公式と呼ばれるものです。</p>



<p>ここで、\( do()\) はdo演算子といいます。これは変数\(X\) が自然に値\(x\)をとる場合と \( X=x \) に固定する場合を区別して表記したいという理由から、値を固定する後者の場合を\( do(X=x) \) と表記するために用いています。例示した図3.1の因果グラフにおいては、\(Z\)に依存した何等かの理由により薬を使った人のうち回復する確率を \( P(Y = 1 | X = 1) \) 、\(Z\)によらず、全員に対して薬を使うように固定した場合の回復する確率を \( P(Y = 1 | do(X = 1)) \)と表しています。固定して薬を使うようなケースは介入試験で全員に薬を使った場合などを指します。</p>



<p>言葉だとわかりづらいと思うので因果グラフでも示します。\(do(X=x)\) というように\(X \) を固定した場合の修正後の因果グラフは以下のようになります。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="661" height="275" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/drug_do_X.png" alt="" class="wp-image-1613" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/drug_do_X.png 661w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/drug_do_X-300x125.png 300w" sizes="auto, (max-width: 661px) 100vw, 661px" /><figcaption class="wp-element-caption">do(X)で修正後の新薬効果の因果グラフ</figcaption></figure></div>


<p>この因果グラフにおける確率を本にならって\(P_m\) と表記します。この修正後の因果グラフの確率\(P_m\)を利用すると\( P(Y |  do(X)) \) は以下のように表すことができます。</p>



<p>$$ \begin{align*}<br>P(Y | do(X)) = P_m(Y|X) \tag{3.2} \\<br>\end{align*} $$</p>



<p>この後はこの\(P(Y | do(X)) \)が式変形により\(P_m\)に依存しない形に式変形できることを示します。これができると介入試験のデータを使わずに観察データから\(P(Y | do(X)) \)が求められることとになります。</p>



<p>\(P(Y | do(X)) \)の式変形の前に後ほど式変形で重要な関係を以下に列挙しておきます。</p>



<p>$$ \begin{align*} <br>P_m(Z) =&amp; P(Z)  \tag{3.3} \\<br>P_m(Y|X, Z) =&amp; P(Y|X, Z) \tag{3.4} \\<br>\end{align*} $$</p>



<p>式(3.3)は\(Z\) が\(X\)の介入による影響がないため、式(3.4)は\(X\)と\(Z\)が条件付けされた状況下において、\(Y\)の確率は修正前後で変化しないため成り立ちます。</p>



<p>それでは\(P(Y | do(X)) \)の式変形をしていきます。まず、先ほど示した通り、以下のように\(P_m\)を利用すると以下のように表すことができます。</p>



<p>$$ \begin{align*}<br>P(Y | do(X)) = P_m(Y|X) \tag{3.2} \\<br>\end{align*} $$</p>



<p>ここで、確率の周辺化が以下のような式で行えることを利用します。</p>



<p>$$ \begin{align*} <br>P(Y) =&amp; \sum_x P(Y, X=x) \tag{3.5} \\<br>\end{align*} $$</p>



<p>この周辺化の式を利用して式(3.2)を\(P_m(Y, Z|X) \)の同時確率の式で書きます。</p>



<p>$$ \begin{align*}<br>P(Y | do(X)) &amp;= P_m(Y|X)  \\<br>&amp;= \sum_z P_m(Y, Z=z | X) \tag{3.6}<br>\end{align*} $$</p>



<p>次に\(P_m(Y, Z | X)\)の部分を条件付き確率の定義を利用します。条件付き確率の定義より\( P_m(Y|X, Z) \)の部分は以下のようになります。</p>



<p>$$ \begin{align*}<br>P_m(Y|X, Z) &amp;= \frac{P_m(Y, Z | X)}{P_m(Z|X)}  \tag{3.7}<br>\end{align*} $$</p>



<p>後ほどの説明で分かりやすいように式(3.7)の左右を入れ替えて、両辺を\(P_m(Z|X)\)でかけると以下の式になります。</p>



<p>$$ \begin{align*}<br>\frac{P_m(Y, Z | X)}{P_m(Z|X)} &amp;= P_m(Y|X, Z) \\<br>\frac{P_m(Y, Z | X)P_m(Z|X)}{P_m(Z|X)} &amp;= P_m(Y|X, Z)P_m(Z|X) \\<br>P_m(Y, Z | X) &amp;= P_m(Y|X, Z)P_m(Z|X)  \tag{3.8}<br>\end{align*} $$</p>



<p>ここで修正後の因果グラフにおいて\(Z\)は\(X\)と独立なことを利用すると以下のように変形できます。</p>



<p>$$ \begin{align*}<br>P_m(Z|X) = P_m(Z)  \tag{3.9}<br>\end{align*} $$</p>



<p>式(3.3)、 (3.4)、(3.9) を利用すると式(3.8)は以下のように変形できます。</p>



<p>$$ \begin{align*}<br>P_m(Y, Z | X) &amp;= P_m(Y|X, Z)P_m(Z|X) \\<br>&amp;= P_m(Y|X, Z)P_m(Z) \\ <br>&amp;= P_m(Y|X, Z)P(Z) \\ <br>&amp;= P(Y|X, Z)P(Z) \\ <br>\tag{3.10}<br>\end{align*} $$</p>



<p>この式(3.10)を式(3.6)に代入すると以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y | do(X)) &amp;= \sum_z P_m(Y, Z=z | X) \\<br>&amp;= \sum_z P(Y|X, Z=z)P(Z=z) \\<br>\tag{3.11}<br>\end{align*} $$</p>



<p>以上の結果から式(3.1)を導出できました。</p>



<h2 class="wp-block-heading">調整化公式を傾向スコアを使った形に変形する (3.2.1 調整すべきか否か)</h2>



<p>先ほど示した調整化公式を因果推論でよく使われる傾向スコアを使った以下の形の式に変形します。</p>



<p>$$ \begin{align*}<br>P(Y | do(X)) &amp;= \sum_z  \frac{P(X, Y, Z=z)}{P(X|Z=z)} \\<br>\tag{3.12}<br>\end{align*} $$</p>



<p>ここで\(P(Z|X)\)が傾向スコアです。</p>



<p>では、調整化公式の式(3.1)を式(3.12)の形を目指して変形していきます。まずは右辺の\(P(Y|X, Z=z)P(Z=z)\)に注目します。ここで、\(P(X|Z)/P(X|Z)\)をかけます。</p>



<p>$$ \begin{align*}<br>P(Y|X, Z)P(Z) &amp;= \frac{P(Y|X, Z)P(X|Z)P(Z)}{P(X|Z)} \\<br>\tag{3.13}<br>\end{align*} $$</p>



<p>ここで分子の部分について条件付き確率の定義から\(X\)と\(Z\)を条件付けせずに同時確率の形で書くことができます。具体的には以下のように変形できます。</p>



<p>$$ \begin{align*}<br>P(Y|X, Z)P(X|Z)P(Z) &amp;= P(X, Y|Z)P(Z) \\<br>&amp;= P(X, Y, Z) \\<br>\tag{3.14}<br>\end{align*} $$</p>



<p>この式(3.13)、(3.14)を利用すると式(3.11)は以下のように変形できます。</p>



<p>$$ \begin{align*}<br>P(Y | do(X)) &amp;= \sum_z P(Y|X, Z=z)P(Z=z) \\<br>&amp;= \sum_z  \frac{P(Y|X, Z=z)P(X|Z=z)P(Z=z)}{P(X|Z=z)} \\<br>&amp;= \sum_z  \frac{P(X, Y, Z=z)}{P(X|Z=z)} \\<br>\tag{3.15}<br>\end{align*} $$</p>



<p>これで求めたかった式(3.12)を導出することができました。</p>



<h2 class="wp-block-heading">フロントドア公式の導出 (3.4 フロントドア基準)</h2>



<p>次にフロントドア公式の導出について説明していきます。ここでは以下の因果グラフを考えます。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="651" height="266" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/smoking.png" alt="" class="wp-image-1614" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/smoking.png 651w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/smoking-300x123.png 300w" sizes="auto, (max-width: 651px) 100vw, 651px" /><figcaption class="wp-element-caption">喫煙と肺がんの因果グラフ</figcaption></figure></div>


<p>\(U\)は観測されていない交絡因子なので、この\(U\)を使わない形で\(X\)の効果、ここでは喫煙の肺がんへの影響があるかを考えます。これを考えるうえで、変数\(Z\)、ここではタール蓄積が観測できているとします。そして、ゴールとして因果効果を測るうえで、\(P(Y|do(X))\) という確率が求められれば良いと考えます。</p>



<p>本のほうの説明ではバックドア基準を２度にわたって適用すればよいと書かれています。しかし、この意味がなんとなくでしか私は理解できなかったので、私なりに\(P(Y|do(X))\)を式変形していってフロントドア公式を導出していきます。具体的には先ほどの因果グラフにおいて以下の式の導出を行います。</p>



<p>$$ \begin{align*}<br>P(Y | do(X=x)) &amp;= \sum_z P(Y|do(Z=z))P(Z=z | do(X=x)) \\<br>&amp;= \sum_z \sum_{x^{\prime}} P(Y|X=x^{\prime}, Z=z)P(Z=z | X=x) \tag{3.16}<br>\end{align*} $$</p>



<p>ではフロンドドア公式の導出を始めます。まずは式(3.16)の１行目のdo演算子を使った式を目指して\(P(Y|do(X))\)を変形していきます。まず、\(P(Y|do(X))\)を周辺化の式(3.6)を利用して\(P(Y, Z|do(X))\)という同時確率を使った式に変形し、その後、\(Z\)で条件付けした確率に変形させます。</p>



<p>$$ \begin{align*}<br>P(Y | do(X)) &amp;= \sum_z P(Y, Z=z|do(X)) \\<br>&amp;= \sum_z P(Y|do(X), Z=z)P(Z=z | do(X)) \tag{3.17}<br>\end{align*} $$</p>



<p>ここで、因果グラフより\(X\)から\(Y\)につながるパスは\(X \rightarrow Z \rightarrow Y \)しかありません。このため、\(Z\)で条件付けされていると変数\(Y\)は\(X\)とは独立となっています。このため、\(P(Y|do(X), Z=z)\)の部分は以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y|do(X), Z) &amp;= P(Y|Z)  \tag{3.18}<br>\end{align*} $$</p>



<p>次に、周辺化の式を利用して\(P(Y|Z)\)を\(X\)を加えた同時確率で表現したあと、\(X\)の条件付き確率の形を使って表します。</p>



<p>$$ \begin{align*}<br>P(Y|Z) &amp;= \sum_{x^{\prime}} P(X=x^{\prime}, Y|Z) \\<br>&amp;= \sum_{x^{\prime}} P(Y|X=x^{\prime}, Z)P(X=x^{\prime}) \tag{3.18}<br>\end{align*} $$</p>



<p>次に\(P(Y|X, Z)\)を変形していきます。ただ、ここからだと分かりにくいので\(P(Y|do(Z))\)から式変形していって、\(P(Y|X, Z)\)になることを示します。基本の流れは調整化公式の導出と同じ流れです。</p>



<p>まず、わかりやすいように\(do(Z)\)で修正された因果グラフを示します。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="646" height="257" src="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/smoking_d_Z.png" alt="" class="wp-image-1615" srcset="https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/smoking_d_Z.png 646w, https://www.mattari-benkyo-note.com/wp-content/uploads/2023/01/smoking_d_Z-300x119.png 300w" sizes="auto, (max-width: 646px) 100vw, 646px" /><figcaption class="wp-element-caption">do(Z)で修正後の喫煙と肺がんの因果グラフ</figcaption></figure></div>


<p>この因果グラフにおける確率を\(P_{z}\) とすると\(P(Y|do(Z))\)を\(P_{z}\)で表したあと、確率の周辺化と条件付きの定義を利用して変形していくと以下の通りです。</p>



<p>$$ \begin{align*}<br>P(Y|do(Z)) &amp;= P_z(Y|Z) \\<br>&amp;= \sum_{x^{\prime}} P_z(Y, X=x^{\prime}|Z) \\<br>&amp;= \sum_{x^{\prime}} P_z(Y|X=x^{\prime}, Z)P_z(X=x^{\prime}|Z) \tag{3.19}<br>\end{align*} $$</p>



<p>また、修正前後の因果グラフより以下が成り立ちます。</p>



<p>$$ \begin{align*} <br>P_z(X|Z) &amp;= P_z(X)  \tag{3.20} \\<br>P_z(X) &amp;= P(X)  \tag{3.21} \\<br>P_z(Y|X, Z) &amp;= P(Y|X, Z) \tag{3.22} \\<br>\end{align*} $$</p>



<p>この式(3.20)から(3.22)を利用して式(3.19)の\(P_z(Y|X, Z)P_z(X|Z) \)の部分を以下のように変形します。</p>



<p>$$ \begin{align*} <br>P_z(Y|X, Z)P_z(X|Z) &amp;= P_z(Y|X, Z)P_z(X) \\<br>&amp;= P_z(Y|X, Z)P(X) \\<br>&amp;= P(Y|X, Z)P(X)   \tag{3.23}<br>\end{align*} $$</p>



<p>この式(3.23)を利用すると式(3.19)は以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y|do(Z)) &amp;= \sum_{x^{\prime}} P_z(Y|X=x^{\prime}, Z)P_z(X=x^{\prime}|Z) \\ <br>&amp;= \sum_{x^{\prime}} P(Y|X=x^{\prime}, Z)P(X=x^{\prime})<br>\tag{3.24}<br>\end{align*} $$</p>



<p>この式(3.24)と式(3.19)を利用すると式(3.18)は以下のようになります。</p>



<p>$$ \begin{align*}<br>P(Y|do(X), Z) &amp;= P(Y|Z)  \\<br>&amp;= \sum_{x^{\prime}} P(Y|X=x^{\prime}, Z)P(X=x^{\prime}) \\<br>&amp;= P(Y|do(Z)) \tag{3.25}<br>\end{align*} $$</p>



<p>よって式(3.25)を利用して式(3.17)を変形するとまず求めたかった式(3.16)のdo演算子を使った形になります。</p>



<p>$$ \begin{align*}<br>P(Y | do(X)) &amp;= \sum_z P(Y|do(X), Z=z)P(Z=z | do(X)) \\<br>&amp;= \sum_z P(Y|do(Z=z))P(Z=z | do(X)) \tag{3.26}<br>\end{align*} $$</p>



<p>ここまでで、式(3.16)の1行目のdo演算子を使った式ができました。ここから、do演算子のない形に変形していきます。</p>



<p>まず、式(3.24)の式を使い\(do(Z)\)を使わない形に式(3.26)を変形します。ここから\(X\)の値が2種類でてくるので区別できるように\(x\)と\(x^{\prime}\)の二つに分けます。</p>



<p>$$ \begin{align*}<br>P(Y | do(X=x)) &amp;= \sum_z P(Y|do(Z=z))P(Z=z | do(X=x)) \\<br>&amp;= \sum_{x^{\prime}} P(Y|X=x^{\prime}, Z)P(X=x^{\prime})P(Z=z | do(X=x)) \\<br>\tag{3.27}<br>\end{align*} $$</p>



<p>次に\(P(Z=z | do(X=x))\)の部分で\(do(X)\)がない形に変形することを目指します。ここで元の因果グラフを見ると\(X\) から\(Z\)につながるパスは\(X \rightarrow Z \)しかないため、因果グラフから以下の等式が成り立ちます。</p>



<p>$$ \begin{align*}<br>P(Z| do(X)) &amp;= P(Z|X)<br>\tag{3.28}<br>\end{align*} $$</p>



<p>（\(do(X)\)によって修正された因果グラフを考えて\(P(Z=z | do(X=x))\)を修正後の因果グラフの確率から観測データから計算できる確率にするにはどうすればよいのか考えてもいいのですが、自明なので省略します。）</p>



<p>この式(3.28)を利用すると式(3.27)は以下のように変形できます。</p>



<p>$$ \begin{align*}<br>P(Y | do(X=x)) &amp;= \sum_{x^{\prime}} P(Y|X=x^{\prime}, Z)P(X=x^{\prime})P(Z=z | do(X=x)) \\<br>&amp;= \sum_{x^{\prime}} P(Y|X=x^{\prime}, Z)P(X=x^{\prime})P(Z=z | X=x) \tag{3.29}<br>\end{align*} $$</p>



<p>この式は求めたかった式（3.16）の式になっています。これでフロントドア公式を導出することができました。</p>



<h2 class="wp-block-heading"> 終わりに</h2>



<p>今回の記事では入門 統計的因果推論 の３章の部分で私がぱっとわからなかった部分の式変形を中心に説明する記事を書きました。本当はCDE (Controlled direct effect) (本で3.7 媒介で説明されていた部分)もぱっとわからなかったのですが、ここに関しては４章の内容とまとめて説明したほうが分かりやすいので、４章の記事のときに説明しようと思います。</p>



<p>この記事がこの本を読む他の人にも役に立てば幸いです。</p><p>The post <a href="https://www.mattari-benkyo-note.com/2023/01/12/causal-inference-in-statistics-a-primer-chapter-3/">[勉強ノート] 入門 統計的因果推論 3章 介入効果　</a> first appeared on <a href="https://www.mattari-benkyo-note.com">まったり勉強ノート</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.mattari-benkyo-note.com/2023/01/12/causal-inference-in-statistics-a-primer-chapter-3/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1538</post-id>	</item>
	</channel>
</rss>
