302 lines
18 KiB
HTML
302 lines
18 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en" dir="auto">
|
|
|
|
<head><meta charset="utf-8">
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
<meta name="robots" content="index, follow">
|
|
<meta name="apple-mobile-web-app-capable" content="yes">
|
|
<title>VAE의 손실 함수 | Morgan's Blog</title>
|
|
<meta name="keywords" content="">
|
|
<meta name="description" content="VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.
|
|
먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.
|
|
$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$
|
|
여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다.">
|
|
<meta name="author" content="Me">
|
|
<link rel="canonical" href="http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/">
|
|
|
|
<script type="text/javascript">
|
|
let vh = window.innerHeight * 0.01;
|
|
document.documentElement.style.setProperty('--vh', `${vh}px`);
|
|
</script>
|
|
<link crossorigin="anonymous" href="/assets/css/stylesheet.dde9171333af37b8e856933e0deb815c09f761bbd3ee0e6826d3a1309b808533.css" integrity="sha256-3ekXEzOvN7joVpM+DeuBXAn3YbvT7g5oJtOhMJuAhTM=" rel="preload stylesheet" as="style">
|
|
<script defer crossorigin="anonymous" src="/assets/js/highlight.f413e19d0714851f6474e7ee9632408e58ac146fbdbe62747134bea2fa3415e0.js" integrity="sha256-9BPhnQcUhR9kdOfuljJAjlisFG+9vmJ0cTS+ovo0FeA="
|
|
onload="hljs.initHighlightingOnLoad();"></script>
|
|
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.css">
|
|
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/katex.min.js"></script>
|
|
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.9/dist/contrib/auto-render.min.js" onload="renderMathInElement(document.body);"></script>
|
|
<script>
|
|
document.addEventListener("DOMContentLoaded", function() {
|
|
renderMathInElement(document.body, {
|
|
delimiters: [
|
|
{left: "$$", right: "$$", display: true},
|
|
{left: "$", right: "$", display: false}
|
|
]
|
|
});
|
|
});
|
|
</script>
|
|
|
|
<link rel="icon" href="https://blog.morgan.kr/favicon.ico">
|
|
|
|
<meta name="theme-color" content="#2e2e33">
|
|
<meta name="msapplication-TileColor" content="#2e2e33">
|
|
<noscript>
|
|
<style>
|
|
#theme-toggle,
|
|
.top-link {
|
|
display: none;
|
|
}
|
|
|
|
</style>
|
|
</noscript><meta property="og:title" content="VAE의 손실 함수" />
|
|
<meta property="og:description" content="VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.
|
|
먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.
|
|
$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$
|
|
여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다." />
|
|
<meta property="og:type" content="article" />
|
|
<meta property="og:url" content="http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/" /><meta property="article:section" content="posts" />
|
|
<meta property="article:published_time" content="2022-12-15T11:21:46+00:00" />
|
|
<meta property="article:modified_time" content="2022-12-15T11:21:46+00:00" /><meta property="og:site_name" content="Morgan's Blog" />
|
|
|
|
<meta name="twitter:card" content="summary"/>
|
|
<meta name="twitter:title" content="VAE의 손실 함수"/>
|
|
<meta name="twitter:description" content="VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.
|
|
먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.
|
|
$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$
|
|
여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다."/>
|
|
|
|
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "BreadcrumbList",
|
|
"itemListElement": [,
|
|
{
|
|
"@type": "ListItem",
|
|
"position": 2 ,
|
|
"name": "Posts",
|
|
"item": "http://blog.morgan.kr/posts/"
|
|
},
|
|
{
|
|
"@type": "ListItem",
|
|
"position": 3 ,
|
|
"name": "VAE의 손실 함수",
|
|
"item": "http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/"
|
|
}
|
|
]
|
|
}
|
|
</script>
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "BlogPosting",
|
|
"headline": "VAE의 손실 함수",
|
|
"name": "VAE의 손실 함수",
|
|
"description": "VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.\n먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.\n$$L = \\mathbb{E}{q(z|x)}[\\log p(x|z)] - D{KL}(q(z|x)||p(z))$$\n여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다.",
|
|
"keywords": [
|
|
|
|
],
|
|
"articleBody": "VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.\n먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.\n$$L = \\mathbb{E}{q(z|x)}[\\log p(x|z)] - D{KL}(q(z|x)||p(z))$$\n여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다. $q(z|x)$는 인코더의 출력을 잠재 변수의 확률 분포로 추정한 것을 의미하며, $D_{KL}$은 클로저-라이브러리 발산을 의미합니다.\n이를 분리하여 계산하면 아래와 같이 나뉩니다.\n$$L = \\mathbb{E}{q(z|x)}[\\log p(x|z)] - D{KL}(q(z|x)||p(z))$$\n$$= \\mathbb{E}{q(z|x)}[\\log p(x|z)] - \\mathbb{E}{q(z|x)}[\\log \\frac{q(z|x)}{p(z)}]$$\n이때, reparametrization trick을 이용하면 손실 함수의 그래디언트를 쉽게 계산할 수 있습니다. 이 기법은 잠재 변수의 확률 분포를 정의할 때, 정규 분포의 모수를 함수로 표현하는 것을 의미합니다. 이렇게 하면 잠재 변수의 확률 분포를 명시적으로 정의할 수 있어 그래디언트를 계산하기 쉬워집니다.\n예를 들어, $q(z|x)$를 아래와 같이 정의할 수 있습니다.\n$$q(z|x) = \\mathcal{N}(\\mu(x), \\sigma^2(x))$$\n여기서 $\\mu(x)$와 $\\sigma^2(x)$는 인코더의 출력을 이용해 계산된 정규 분포의 모수입니다. 이렇게 정의된 $q(z|x)$를 이용하면 손실 함수의 그래디언트를 아래와 같이 계산할 수 있습니다.\n$$\\frac{\\partial L}{\\partial \\theta} = \\frac{\\partial}{\\partial \\theta}\\mathbb{E}{q(z|x)}[\\log p(x|z)] - \\frac{\\partial}{\\partial \\theta}\\mathbb{E}{q(z|x)}[\\log \\frac{q(z|x)}{p(z)}]$$\n$$= \\mathbb{E}{q(z|x)}\\left[\\frac{\\partial}{\\partial \\theta}\\log p(x|z)\\right] - \\mathbb{E}{q(z|x)}\\left[\\frac{\\partial}{\\partial \\theta}\\log \\frac{q(z|x)}{p(z)}\\right]$$\n이때, 위 식의 첫 번째 항을 전개하면 다음과 같습니다.\n$$\\mathbb{E}_{q(z|x)}\\left[\\frac{\\partial}{\\partial \\theta}\\log p(x|z)\\right] = \\int q(z|x)\\frac{\\partial}{\\partial \\theta}\\log p(x|z) dz$$\n여기서 $\\theta$는 VAE에서 사용되는 모든 매개변수를 의미합니다. 따라서 이 식을 이용하면 VAE의 손실 함수의 그래디언트를 계산할 수 있습니다.\n예를 들어, 손실 함수가 $L = \\mathbb{E}{q(z|x)}[\\log p(x|z)] - D{KL}(q(z|x)||p(z))$인 경우에는 첫 번째 항의 그래디언트는 다음과 같이 계산할 수 있습니다.\n$$\\frac{\\partial}{\\partial \\theta}\\mathbb{E}{q(z|x)}[\\log p(x|z)] = \\mathbb{E}{q(z|x)}\\left[\\frac{\\partial}{\\partial \\theta}\\log p(x|z)\\right]$$\n",
|
|
"wordCount" : "258",
|
|
"inLanguage": "en",
|
|
"datePublished": "2022-12-15T11:21:46.836Z",
|
|
"dateModified": "2022-12-15T11:21:46.836Z",
|
|
"author":{
|
|
"@type": "Person",
|
|
"name": "Me"
|
|
},
|
|
"mainEntityOfPage": {
|
|
"@type": "WebPage",
|
|
"@id": "http://blog.morgan.kr/2022/12/vae%EC%9D%98-%EC%86%90%EC%8B%A4-%ED%95%A8%EC%88%98/"
|
|
},
|
|
"publisher": {
|
|
"@type": "Organization",
|
|
"name": "Morgan's Blog",
|
|
"logo": {
|
|
"@type": "ImageObject",
|
|
"url": "https://blog.morgan.kr/favicon.ico"
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
</head>
|
|
|
|
<body class=" dark" id="top"><header class="header">
|
|
</header>
|
|
<script>
|
|
if (localStorage.getItem("pref-theme") === "light") {
|
|
document.body.classList.remove('dark')
|
|
document.getElementById('main-logo').src = "\/favicon-inv.png";
|
|
}
|
|
|
|
</script>
|
|
<main class="main">
|
|
|
|
<article class="post-single">
|
|
|
|
<header class="post-header">
|
|
<h1 class="post-title">
|
|
VAE의 손실 함수
|
|
</h1>
|
|
|
|
<div class="post-meta"><span title='2022-12-15 11:21:46.836 +0000 UTC'>
|
|
Dec 15, 2022
|
|
</span>
|
|
</div>
|
|
</header>
|
|
<div class="post-divider"></div>
|
|
<div class="post-content"><p>VAE의 손실 함수는 Variational Lower Bound(VLB)라고도 불리는데, 이 함수는 VAE에서 사용되는 정보량을 측정하는데 사용됩니다. 이 함수는 두 부분으로 나뉘어져 있으며, 이를 분리하여 계산하는 것이 일반적입니다. 이 때, reparametrization trick이란 기법을 사용하면 VAE의 손실 함수의 그래디언트를 계산하는 데 도움이 될 수 있습니다.</p>
|
|
<p>먼저, VAE의 손실 함수는 아래와 같이 정의됩니다.</p>
|
|
<p>$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$</p>
|
|
<p>여기서 $p(x|z)$는 인코더의 출력을 디코더의 입력으로 넣었을 때 생성되는 값을 의미하고, $p(z)$는 잠재 변수의 확률 분포를 의미합니다. $q(z|x)$는 인코더의 출력을 잠재 변수의 확률 분포로 추정한 것을 의미하며, $D_{KL}$은 클로저-라이브러리 발산을 의미합니다.</p>
|
|
<p>이를 분리하여 계산하면 아래와 같이 나뉩니다.</p>
|
|
<p>$$L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$$</p>
|
|
<p>$$= \mathbb{E}{q(z|x)}[\log p(x|z)] - \mathbb{E}{q(z|x)}[\log \frac{q(z|x)}{p(z)}]$$</p>
|
|
<p>이때, reparametrization trick을 이용하면 손실 함수의 그래디언트를 쉽게 계산할 수 있습니다. 이 기법은 잠재 변수의 확률 분포를 정의할 때, 정규 분포의 모수를 함수로 표현하는 것을 의미합니다. 이렇게 하면 잠재 변수의 확률 분포를 명시적으로 정의할 수 있어 그래디언트를 계산하기 쉬워집니다.</p>
|
|
<p>예를 들어, $q(z|x)$를 아래와 같이 정의할 수 있습니다.</p>
|
|
<p>$$q(z|x) = \mathcal{N}(\mu(x), \sigma^2(x))$$</p>
|
|
<p>여기서 $\mu(x)$와 $\sigma^2(x)$는 인코더의 출력을 이용해 계산된 정규 분포의 모수입니다. 이렇게 정의된 $q(z|x)$를 이용하면 손실 함수의 그래디언트를 아래와 같이 계산할 수 있습니다.</p>
|
|
<p>$$\frac{\partial L}{\partial \theta} = \frac{\partial}{\partial \theta}\mathbb{E}{q(z|x)}[\log p(x|z)] - \frac{\partial}{\partial \theta}\mathbb{E}{q(z|x)}[\log \frac{q(z|x)}{p(z)}]$$</p>
|
|
<p>$$= \mathbb{E}{q(z|x)}\left[\frac{\partial}{\partial \theta}\log p(x|z)\right] - \mathbb{E}{q(z|x)}\left[\frac{\partial}{\partial \theta}\log \frac{q(z|x)}{p(z)}\right]$$</p>
|
|
<p>이때, 위 식의 첫 번째 항을 전개하면 다음과 같습니다.</p>
|
|
<p>$$\mathbb{E}_{q(z|x)}\left[\frac{\partial}{\partial \theta}\log p(x|z)\right] = \int q(z|x)\frac{\partial}{\partial \theta}\log p(x|z) dz$$</p>
|
|
<p>여기서 $\theta$는 VAE에서 사용되는 모든 매개변수를 의미합니다. 따라서 이 식을 이용하면 VAE의 손실 함수의 그래디언트를 계산할 수 있습니다.</p>
|
|
<p>예를 들어, 손실 함수가 $L = \mathbb{E}{q(z|x)}[\log p(x|z)] - D{KL}(q(z|x)||p(z))$인 경우에는 첫 번째 항의 그래디언트는 다음과 같이 계산할 수 있습니다.</p>
|
|
<p>$$\frac{\partial}{\partial \theta}\mathbb{E}{q(z|x)}[\log p(x|z)] = \mathbb{E}{q(z|x)}\left[\frac{\partial}{\partial \theta}\log p(x|z)\right]$$</p>
|
|
|
|
|
|
</div>
|
|
|
|
<footer class="post-footer">
|
|
<ul class="post-tags">
|
|
</ul>
|
|
<nav class="pag-back">
|
|
<a href="#back" onclick="window.history.back()">
|
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;fill: var(--primary);stroke: var(--primary);" stroke-width="1"><polygon points="11.65,3.50 3.80,11.35 11.65,19.20 12.36,18.50 5.71,11.85 20.15,11.85 20.15,10.85 5.71,10.85 12.36,4.20"></polygon></svg>
|
|
</a>
|
|
</nav>
|
|
<br/>
|
|
</footer>
|
|
</article>
|
|
</main>
|
|
|
|
<footer class="footer">
|
|
<a href="/admin/" style="text-decoration: none;">©</a> <span><a href="http://blog.morgan.kr">Morgan</a> · PaperMod</span>
|
|
<br/>
|
|
<span style="">Ver.11081623 </span>
|
|
<a href="#" id="theme-toggle">Toggle Dark Mode</a>
|
|
</footer>
|
|
<button id="top-link" class="top-link" onclick="window.scrollTo({top: 0, behavior: 'smooth'})">
|
|
<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 24 24" width="24" focusable="false" style="pointer-events: none; display: block; width: 100%; height: 100%;" fill="currentColor" stroke="white" stroke-width="1"><polygon points="19.35,11.5 11.5,3.65 3.65,11.5 4.35,12.21 11,5.56 11,20 12,20 12,5.56 18.65,12.21"></polygon></svg>
|
|
</button>
|
|
|
|
<script>
|
|
let menu = document.getElementById('menu')
|
|
if (menu) {
|
|
menu.scrollLeft = localStorage.getItem("menu-scroll-position");
|
|
menu.onscroll = function () {
|
|
localStorage.setItem("menu-scroll-position", menu.scrollLeft);
|
|
}
|
|
}
|
|
|
|
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
|
|
anchor.addEventListener("click", function (e) {
|
|
e.preventDefault();
|
|
var id = this.getAttribute("href").substr(1);
|
|
if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
|
|
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView({
|
|
behavior: "smooth"
|
|
});
|
|
} else {
|
|
document.querySelector(`[id='${decodeURIComponent(id)}']`).scrollIntoView();
|
|
}
|
|
if (id === "top") {
|
|
history.replaceState(null, null, " ");
|
|
} else {
|
|
history.pushState(null, null, `#${id}`);
|
|
}
|
|
});
|
|
});
|
|
|
|
</script>
|
|
<script>
|
|
var mybutton = document.getElementById("top-link");
|
|
window.onscroll = function () {
|
|
if (document.body.scrollTop > 800 || document.documentElement.scrollTop > 800) {
|
|
mybutton.style.visibility = "visible";
|
|
mybutton.style.opacity = "1";
|
|
} else {
|
|
mybutton.style.visibility = "hidden";
|
|
mybutton.style.opacity = "0";
|
|
}
|
|
};
|
|
|
|
</script>
|
|
<script>
|
|
document.getElementById("theme-toggle").addEventListener("click", () => {
|
|
if (document.body.className.includes("dark")) {
|
|
document.body.classList.remove('dark');
|
|
localStorage.setItem("pref-theme", 'light');
|
|
document.getElementById('main-logo').src = "\/favicon-inv.png";
|
|
|
|
} else {
|
|
document.body.classList.add('dark');
|
|
localStorage.setItem("pref-theme", 'dark');
|
|
document.getElementById('main-logo').src = "\/favicon.png";
|
|
|
|
}
|
|
})
|
|
|
|
</script>
|
|
<script>
|
|
document.querySelectorAll('pre > code').forEach((codeblock) => {
|
|
const container = codeblock.parentNode.parentNode;
|
|
|
|
const copybutton = document.createElement('button');
|
|
copybutton.classList.add('copy-code');
|
|
copybutton.innerHTML = 'copy';
|
|
|
|
function copyingDone() {
|
|
copybutton.innerHTML = 'copied!';
|
|
setTimeout(() => {
|
|
copybutton.innerHTML = 'copy';
|
|
}, 2000);
|
|
}
|
|
|
|
copybutton.addEventListener('click', (cb) => {
|
|
if ('clipboard' in navigator) {
|
|
navigator.clipboard.writeText(codeblock.textContent);
|
|
copyingDone();
|
|
return;
|
|
}
|
|
|
|
const range = document.createRange();
|
|
range.selectNodeContents(codeblock);
|
|
const selection = window.getSelection();
|
|
selection.removeAllRanges();
|
|
selection.addRange(range);
|
|
try {
|
|
document.execCommand('copy');
|
|
copyingDone();
|
|
} catch (e) { };
|
|
selection.removeRange(range);
|
|
});
|
|
|
|
if (container.classList.contains("highlight")) {
|
|
container.appendChild(copybutton);
|
|
} else if (container.parentNode.firstChild == container) {
|
|
|
|
} else if (codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName == "TABLE") {
|
|
|
|
codeblock.parentNode.parentNode.parentNode.parentNode.parentNode.appendChild(copybutton);
|
|
} else {
|
|
|
|
codeblock.parentNode.appendChild(copybutton);
|
|
}
|
|
});
|
|
</script>
|
|
</body>
|
|
|
|
</html>
|