{
    "componentChunkName": "component---src-templates-post-tsx",
    "path": "/page_rank/",
    "result": {"data":{"logo":null,"markdownRemark":{"html":"<h2>Page Rank</h2>\n<p>구글은 무엇을 기준으로 사이트를 보여주는 순서를 정할까요??</p>\n<p>구글에 특정 단어를 검색하면 다음과 같이 여러 사이트 들을 보여주는 것을 알 수 있습니다.</p>\n<hr>\n<img src=\"https://user-images.githubusercontent.com/59256704/135422554-b37c5f6f-aa73-48ff-9adf-f438e2017d80.png\" width=\"500\">\n<p>구글은 이런 사이트들에 점수를 부여해주는데, 여기서 부여된 점수들을 Page Rank라고 부릅니다.</p>\n<br>\n<h2>페이지 랭크를 부여하는 두 가지 원칙</h2>\n<ol>\n<li>다른 여러 페이지에 링크가 많을 경우</li>\n<li>영향력있는 사이트에 링크되어 있는 경우</li>\n</ol>\n<p>이 두가지 원칙을 따를 경우 점수가 높아진다!</p>\n<br> \n<img src=\"https://user-images.githubusercontent.com/59256704/135423371-6dcdb6a6-8373-4113-b606-3c20a4a2166b.png\" width=\"500\">\n<p>이 그림을 보시면 잘 이해가 되실 것 같아요.</p>\n<p>원칙1에 의해 B사이트는 다른 여러 페이지들에게 링크가 많아 높은 점수를 부여 받은 것을 볼 수 있습니다.\n또한 C사이트는 B사이트 단 하나만 링크됐지만 원칙2에 의해 높은 점수를 부여 받은 것을 볼 수 있습니다.</p>\n<p>그렇다면 이런 원칙을 따르기 위해서 어떻게 점수를 부여하는지 알아봅시다.</p>\n<img src=\"https://user-images.githubusercontent.com/59256704/135425243-d2ac3b58-fdad-4bae-9087-29dc4458df93.png\" width=\"500\">\n<p>예시로 4개의 각 사이트가 링크가 걸려있는 상황을 방향그래프로 나타내봤습니다.</p>\n<p>이제 누군가 한 사이트에 접속 후 링크를 따라 계속 이동한다고 가정해봅시다.</p>\n<img src=\"https://user-images.githubusercontent.com/59256704/135426655-997c0101-e15f-4d3e-9e5c-b6397ce60315.png\" width=\"500\">\n<p>최초 사이트1에서 이동을 한다면 링크가 하나밖에 없기 때문에 사이트2로 이동하게 되고 확률은 1이 됩니다.</p>\n<img src=\"https://user-images.githubusercontent.com/59256704/135426173-3de4ccdb-1d1c-40e9-b222-764ab6361a31.png\" width=\"500\">\n<p>다음으로 사이트2에서 이동을 한다면 링크가 총 3개가 존재하기 때문에 각 사이트로 갈 확률이 3분의1이 되겠죠.</p>\n<p>이런 과정을 무한히 반복합니다.</p>\n<p><strong>그렇게 이런 과정을 계속 반복해서 각 사이트에 방문할 확률을 계산해보면, 놀랍게도 방문할 확률이 어떤 값에 수렴하게 됩니다.</strong></p>\n<p>즉 확률이 변하지 않는 순간이 오게 됩니다. 그리고 그 확률들을 바로 <code class=\"language-text\">Page Rank</code>라고 부릅니다.</p>\n<hr>\n<p>그렇다면 t번 이동 시 각 사이트에 방문할 확률을 한번 구해봅시다.</p>\n<p>먼저 처음 각 사이트에 방문할 확률을 임의로 정의해줍니다.</p>\n<img src=\"https://user-images.githubusercontent.com/59256704/135431438-122eede8-d624-424c-b431-3c86bb0d0871.png\" width=\"500\">\n<p>그리고 1번 이동 후의 각 사이트에 방문할 확률을 정의합니다.</p>\n<img src=\"https://user-images.githubusercontent.com/59256704/135429147-84c33f68-b155-4297-bbaa-0e31aeb516e0.png\" width=\"500\">\n<br>\n<img src=\"https://user-images.githubusercontent.com/59256704/135429323-ca929e20-e3c0-49e7-a451-0c8329da47fa.png\" width=\"500\">\n<p>1번 이동 후 사이트1에 방문할 확률을 계산한 식을 살펴보면,</p>\n<ol>\n<li>사이트1에서 사이트1로 방문할 방법이 존재하지 않기 때문에 <code class=\"language-text\">a x 0</code></li>\n<li>사이트2에서 사이트1로 이동할 확률은 3분의 1이기 때문에 <code class=\"language-text\">b x (1/3)</code></li>\n<li>사이트3에서 사이트1로 이동할 확률은 2분의 1이기 때문에 <code class=\"language-text\">c x (1/2)</code></li>\n<li>사이트4에서 사이트1로 이동할 확률은 2분의 1이므로 <code class=\"language-text\">d x (1/2)</code>가 됩니다.</li>\n</ol>\n<br>\n<p>이렇게 모두 계산하면 최종적으로 다음과 같은 행렬이 하나 만들어지게 됩니다.</p>\n<img src=\"https://user-images.githubusercontent.com/59256704/135430069-f00d9926-bb58-4422-918d-f1f43931a7e2.png\" width=\"500\">\n<p>각 행이 동일한 변수를 사용하기 때문에 행렬곱 형태로 변환해 최종적으로 다음과 같은 식을 얻을 수 있습니다.</p>\n<br>\n<img src=\"https://user-images.githubusercontent.com/59256704/135433241-da28268d-f48d-4834-9b73-80f998cd8f28.png\" width=\"500\">\n<br>\n<p>마찬가지로 동일한 논리에 따르면 2번 이동했을 때 각 사이트에 방문할 확률은 1번 이동했을 때의 상황에만 영향을 받게됩니다.</p>\n<p>따라서 2번 이동했을 때의 행렬을 구해보면  다음과 같이 얻음을 알 수 있습니다.</p>\n<br>\n<img src=\"https://user-images.githubusercontent.com/59256704/135436391-6c6fc4dc-61f2-40d6-bb77-5201c3828831.png\" width=\"500\">\n<br>\n<p>자 이제 어느정도 반복되는 것을 알 수 있겠죠? 조금 더 직관적으로 볼 수 있도록 정의를 해봅시다.</p>\n<br>\n<img src=\"https://user-images.githubusercontent.com/59256704/135569435-074a1875-b0b7-4ebd-bf03-ef0fcee727c6.png\" width=\"500\">\n<p>고정된 사이트에 이동할 확률을 전이행렬 P, 그리고 각 사이트에 t번 방문할 확률을 X(t)로 정의하면 최종적으로</p>\n<br>\n<img src=\"https://user-images.githubusercontent.com/59256704/135570317-2c124923-8304-4eab-9e6e-c5d253a31baf.png\" width=\"300\">\n<p>이렇게 깔끔하게 정리가 됩니다.</p>\n<p>이 식을 이용해서 수렴된 각 사이트의 확률을 구하고 Page Rank값을 정의하는 것입니다.</p>\n<hr>\n<h3>검증</h3>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">import numpy as np\n\nP = np.array(\n    [[0, 1 / 3, 1 / 2, 1 / 2],\n     [1, 0, 0, 0],\n     [0, 1 / 3, 0, 1 / 2],\n     [0, 1 / 3, 1 / 2, 0]]\n)\n\nX = np.array([0.3, 0.2, 0.3, 0.2])\n\nfor idx, _ in enumerate(range(30)):\n    X = P.dot(X)\n    print(\"----\", idx, \"----\")\n    print(X)</code></pre></div>\n<p>마지막 식을 numpy라이브러리를 이용해 구현해봤습니다. 해당 코드를 실행하면</p>\n<div class=\"gatsby-highlight\" data-language=\"text\"><pre class=\"language-text\"><code class=\"language-text\">---- 15 ----\n...\n...\n...\n[0.29999997 0.30000007 0.20000074 0.19999922]\n---- 16 ----\n[0.3        0.29999997 0.19999963 0.20000039]\n---- 17 ----\n[0.3        0.3        0.20000019 0.19999981]\n---- 18 ----\n[0.3        0.3        0.1999999  0.20000009]\n---- 19 ----\n[0.3        0.3        0.20000005 0.19999995]\n---- 20 ----\n[0.3        0.3        0.19999998 0.20000002]\n---- 21 ----\n[0.3        0.3        0.20000001 0.19999999]\n---- 22 ----\n[0.3        0.3        0.19999999 0.20000001]\n---- 23 ----\n[0.3 0.3 0.2 0.2]\n---- 24 ----\n[0.3 0.3 0.2 0.2]\n---- 25 ----\n[0.3 0.3 0.2 0.2]\n...\n...\n...</code></pre></div>\n<p>이런 결과값을 얻을 수 있는데, 23번째 연산부터 값이 수렴하는 것을 알 수 있습니다.</p>\n<h2>reference</h2>\n<ul>\n<li><a href=\"https://www.youtube.com/watch?v=PGeBhnHxg0E\">https://www.youtube.com/watch?v=PGeBhnHxg0E</a></li>\n<li><a href=\"http://www.secmem.org/blog/2019/07/21/pagerank/\">http://www.secmem.org/blog/2019/07/21/pagerank/</a></li>\n</ul>","htmlAst":{"type":"root","children":[{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"Page Rank"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"구글은 무엇을 기준으로 사이트를 보여주는 순서를 정할까요??"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"구글에 특정 단어를 검색하면 다음과 같이 여러 사이트 들을 보여주는 것을 알 수 있습니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"hr","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135422554-b37c5f6f-aa73-48ff-9adf-f438e2017d80.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"구글은 이런 사이트들에 점수를 부여해주는데, 여기서 부여된 점수들을 Page Rank라고 부릅니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"페이지 랭크를 부여하는 두 가지 원칙"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"다른 여러 페이지에 링크가 많을 경우"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"영향력있는 사이트에 링크되어 있는 경우"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"이 두가지 원칙을 따를 경우 점수가 높아진다!"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":" \n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135423371-6dcdb6a6-8373-4113-b606-3c20a4a2166b.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"이 그림을 보시면 잘 이해가 되실 것 같아요."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"원칙1에 의해 B사이트는 다른 여러 페이지들에게 링크가 많아 높은 점수를 부여 받은 것을 볼 수 있습니다.\n또한 C사이트는 B사이트 단 하나만 링크됐지만 원칙2에 의해 높은 점수를 부여 받은 것을 볼 수 있습니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"그렇다면 이런 원칙을 따르기 위해서 어떻게 점수를 부여하는지 알아봅시다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135425243-d2ac3b58-fdad-4bae-9087-29dc4458df93.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"예시로 4개의 각 사이트가 링크가 걸려있는 상황을 방향그래프로 나타내봤습니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"이제 누군가 한 사이트에 접속 후 링크를 따라 계속 이동한다고 가정해봅시다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135426655-997c0101-e15f-4d3e-9e5c-b6397ce60315.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"최초 사이트1에서 이동을 한다면 링크가 하나밖에 없기 때문에 사이트2로 이동하게 되고 확률은 1이 됩니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135426173-3de4ccdb-1d1c-40e9-b222-764ab6361a31.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"다음으로 사이트2에서 이동을 한다면 링크가 총 3개가 존재하기 때문에 각 사이트로 갈 확률이 3분의1이 되겠죠."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"이런 과정을 무한히 반복합니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"그렇게 이런 과정을 계속 반복해서 각 사이트에 방문할 확률을 계산해보면, 놀랍게도 방문할 확률이 어떤 값에 수렴하게 됩니다."}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"즉 확률이 변하지 않는 순간이 오게 됩니다. 그리고 그 확률들을 바로 "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"Page Rank"}]},{"type":"text","value":"라고 부릅니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"hr","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"그렇다면 t번 이동 시 각 사이트에 방문할 확률을 한번 구해봅시다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"먼저 처음 각 사이트에 방문할 확률을 임의로 정의해줍니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135431438-122eede8-d624-424c-b431-3c86bb0d0871.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"그리고 1번 이동 후의 각 사이트에 방문할 확률을 정의합니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135429147-84c33f68-b155-4297-bbaa-0e31aeb516e0.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135429323-ca929e20-e3c0-49e7-a451-0c8329da47fa.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"1번 이동 후 사이트1에 방문할 확률을 계산한 식을 살펴보면,"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"사이트1에서 사이트1로 방문할 방법이 존재하지 않기 때문에 "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"a x 0"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"사이트2에서 사이트1로 이동할 확률은 3분의 1이기 때문에 "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"b x (1/3)"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"사이트3에서 사이트1로 이동할 확률은 2분의 1이기 때문에 "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"c x (1/2)"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"사이트4에서 사이트1로 이동할 확률은 2분의 1이므로 "},{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"d x (1/2)"}]},{"type":"text","value":"가 됩니다."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"이렇게 모두 계산하면 최종적으로 다음과 같은 행렬이 하나 만들어지게 됩니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135430069-f00d9926-bb58-4422-918d-f1f43931a7e2.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"각 행이 동일한 변수를 사용하기 때문에 행렬곱 형태로 변환해 최종적으로 다음과 같은 식을 얻을 수 있습니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135433241-da28268d-f48d-4834-9b73-80f998cd8f28.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"마찬가지로 동일한 논리에 따르면 2번 이동했을 때 각 사이트에 방문할 확률은 1번 이동했을 때의 상황에만 영향을 받게됩니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"따라서 2번 이동했을 때의 행렬을 구해보면  다음과 같이 얻음을 알 수 있습니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135436391-6c6fc4dc-61f2-40d6-bb77-5201c3828831.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"자 이제 어느정도 반복되는 것을 알 수 있겠죠? 조금 더 직관적으로 볼 수 있도록 정의를 해봅시다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135569435-074a1875-b0b7-4ebd-bf03-ef0fcee727c6.png","width":500},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"고정된 사이트에 이동할 확률을 전이행렬 P, 그리고 각 사이트에 t번 방문할 확률을 X(t)로 정의하면 최종적으로"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"br","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"img","properties":{"src":"https://user-images.githubusercontent.com/59256704/135570317-2c124923-8304-4eab-9e6e-c5d253a31baf.png","width":300},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"이렇게 깔끔하게 정리가 됩니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"이 식을 이용해서 수렴된 각 사이트의 확률을 구하고 Page Rank값을 정의하는 것입니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"hr","properties":{},"children":[]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{},"children":[{"type":"text","value":"검증"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"text"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-text"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"import numpy as np\n\nP = np.array(\n    [[0, 1 / 3, 1 / 2, 1 / 2],\n     [1, 0, 0, 0],\n     [0, 1 / 3, 0, 1 / 2],\n     [0, 1 / 3, 1 / 2, 0]]\n)\n\nX = np.array([0.3, 0.2, 0.3, 0.2])\n\nfor idx, _ in enumerate(range(30)):\n    X = P.dot(X)\n    print(\"----\", idx, \"----\")\n    print(X)"}]}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"마지막 식을 numpy라이브러리를 이용해 구현해봤습니다. 해당 코드를 실행하면"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"div","properties":{"className":["gatsby-highlight"],"dataLanguage":"text"},"children":[{"type":"element","tagName":"pre","properties":{"className":["language-text"]},"children":[{"type":"element","tagName":"code","properties":{"className":["language-text"]},"children":[{"type":"text","value":"---- 15 ----\n...\n...\n...\n[0.29999997 0.30000007 0.20000074 0.19999922]\n---- 16 ----\n[0.3        0.29999997 0.19999963 0.20000039]\n---- 17 ----\n[0.3        0.3        0.20000019 0.19999981]\n---- 18 ----\n[0.3        0.3        0.1999999  0.20000009]\n---- 19 ----\n[0.3        0.3        0.20000005 0.19999995]\n---- 20 ----\n[0.3        0.3        0.19999998 0.20000002]\n---- 21 ----\n[0.3        0.3        0.20000001 0.19999999]\n---- 22 ----\n[0.3        0.3        0.19999999 0.20000001]\n---- 23 ----\n[0.3 0.3 0.2 0.2]\n---- 24 ----\n[0.3 0.3 0.2 0.2]\n---- 25 ----\n[0.3 0.3 0.2 0.2]\n...\n...\n..."}]}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"이런 결과값을 얻을 수 있는데, 23번째 연산부터 값이 수렴하는 것을 알 수 있습니다."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{},"children":[{"type":"text","value":"reference"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"https://www.youtube.com/watch?v=PGeBhnHxg0E"},"children":[{"type":"text","value":"https://www.youtube.com/watch?v=PGeBhnHxg0E"}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"a","properties":{"href":"http://www.secmem.org/blog/2019/07/21/pagerank/"},"children":[{"type":"text","value":"http://www.secmem.org/blog/2019/07/21/pagerank/"}]}]},{"type":"text","value":"\n"}]}],"data":{"quirksMode":false}},"excerpt":"Page Rank 구글은 무엇을 기준으로 사이트를 보여주는 순서를 정할까요?? 구글에 특정 단어를 검색하면 다음과 같이 여러 사이트 들을 보여주는 것을 알 수 있습니다. 구글은 이런 사이트들에 점수를 부여해주는데, 여기서 부여된 점수들을 Page…","fields":{"readingTime":{"text":"7 min read"}},"frontmatter":{"title":"Sooftware NLP - Page Rank란??","userDate":"8 October 2021","date":"2021-10-08T10:00:00.000Z","tags":["nlp","algorithm"],"excerpt":null,"image":{"childImageSharp":{"gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#f8f8f8","images":{"fallback":{"src":"/static/48f781cfe0664d01fb0b81d9e0c56e60/5088a/page_rank.png","srcSet":"/static/48f781cfe0664d01fb0b81d9e0c56e60/744c5/page_rank.png 750w,\n/static/48f781cfe0664d01fb0b81d9e0c56e60/5088a/page_rank.png 818w","sizes":"100vw"},"sources":[{"srcSet":"/static/48f781cfe0664d01fb0b81d9e0c56e60/7c11c/page_rank.webp 750w,\n/static/48f781cfe0664d01fb0b81d9e0c56e60/1c73b/page_rank.webp 818w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":0.6405867970660146}}},"author":[{"id":"Soohwan Kim","bio":"Co-founder/A.I. engineer at TUNiB.","avatar":{"children":[{"gatsbyImageData":{"layout":"fullWidth","backgroundColor":"#282838","images":{"fallback":{"src":"/static/a9e6b445142b247ee4cfa66155398bb2/0d6f4/soohwan.png","srcSet":"/static/a9e6b445142b247ee4cfa66155398bb2/248f9/soohwan.png 40w,\n/static/a9e6b445142b247ee4cfa66155398bb2/fd435/soohwan.png 80w,\n/static/a9e6b445142b247ee4cfa66155398bb2/0d6f4/soohwan.png 120w","sizes":"100vw"},"sources":[{"srcSet":"/static/a9e6b445142b247ee4cfa66155398bb2/e7f45/soohwan.webp 40w,\n/static/a9e6b445142b247ee4cfa66155398bb2/589ec/soohwan.webp 80w,\n/static/a9e6b445142b247ee4cfa66155398bb2/71a38/soohwan.webp 120w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":0.6833333333333333}}]}}]}},"relatedPosts":{"totalCount":50,"edges":[{"node":{"id":"6529d72e-80e7-5d61-a672-d66276a3f641","excerpt":"MoE(Mixture of Experts) 기초부터 DeepSeek 혁신까지 작년 이맘때쯤 DeepSeek-V3가 저비용으로 엄청난 성능을 보이면서 화제가 되었습니다. 그 핵심 기술인 MoE(Mixture of Experts…","frontmatter":{"title":"MoE(Mixture of Experts) 기초부터 DeepSeek 혁신까지","date":"2026-01-15T01:11:55.000Z"},"fields":{"readingTime":{"text":"8 min read"},"slug":"/developed-moe/"}}},{"node":{"id":"8b49d3ef-4ce3-568c-9d71-240ff17fc3e0","excerpt":"BERT는 사실 Diffusion 모델이였다?! 최근 굉장히 흥미로운 글을 읽게되어 공유합니다. 원문 : link BERT와 Diffusion이 같은 방식이다?! NLP 연구자들에게 BERT는 너무 익숙한 모델입니다. 201…","frontmatter":{"title":"BERT는 사실 Diffusion 모델이였다?!","date":"2025-10-21T12:00:00.000Z"},"fields":{"readingTime":{"text":"8 min read"},"slug":"/bert_diffusion/"}}},{"node":{"id":"7c7e1676-ea84-58de-970c-ddec9aa10660","excerpt":"RLHF는 수다쟁이를 만든다?! (Does RLHF Breed Verbose Chatterboxes?!) RLHF(Reinforcement Learning from Human Feedback)는 OpenAI의 ChatGPT…","frontmatter":{"title":"RLHF는 수다쟁이를 만든다?! (Does RLHF Breed Verbose Chatterboxes?!)","date":"2024-03-13T01:11:55.000Z"},"fields":{"readingTime":{"text":"7 min read"},"slug":"/rlhf-vervosity/"}}},{"node":{"id":"2b9d3e22-1796-5fab-878d-5941d2e76e9d","excerpt":"LLM Paper Abstract - 2023.12 LLM…","frontmatter":{"title":"LLM Paper Abstract - 2023.12","date":"2024-01-05T10:00:00.000Z"},"fields":{"readingTime":{"text":"5 min read"},"slug":"/llm-abs-202312/"}}},{"node":{"id":"f43fa33b-917b-5c00-8462-937d99592ad7","excerpt":"What it MoE? (Mixture of Experts) 현존 최강 LLM인 GPT-4에서 “MoE (Mixture of Experts)” 방식을 채택하여 사용하고 있다고 알려졌는데요, 최근 AI계의 뜨거운 감자 Mistral AI…","frontmatter":{"title":"What is MoE? (Mixture of Experts)","date":"2023-12-22T01:11:55.000Z"},"fields":{"readingTime":{"text":"9 min read"},"slug":"/moe/"}}}]}},"pageContext":{"slug":"/page_rank/","prev":{"excerpt":"Uniform Length Batching in PyTorch 전체 토큰 길이가 비슷한 인풋끼리 배치를 이루어주는 방식 그냥 랜덤하게 배치를 묶어주면 길이가 한 데이터를 제외하고는 평균 길이가 10인데 한 데이터 길이가 10…","frontmatter":{"title":"Sooftware NLP - Uniform Length Batching in PyTorch","tags":["nlp"],"date":"2021-09-28T10:00:00.000Z","draft":false,"excerpt":null,"image":{"childImageSharp":{"gatsbyImageData":{"layout":"fullWidth","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAHCAYAAAAIy204AAAACXBIWXMAAAsTAAALEwEAmpwYAAABh0lEQVQoz1WR22vUQBSH85f7Ym3dW7K3qFtQQWkfRMF3kVLxoQ8ilH1YhbYpLd1NsptsMrlOLvvJzKrogY/fmTNzZn4zY1RVzeLHA4vFkvn8nvn8jsvLO1zXp5ZXFNktUha0bUtVSU3bNKi+uqqo65p/w/A8gTlJ6Q1LBuOCoV1i2ZKRHXByesHX87dIuf2vabfb/UVFHEWslkuapsFwPcGTXsBhT3A0iDnsx3QtRcqjg4qjfsLZl5i1941o84lE3KC2adudRkWeZYSbQB9guK7AsjPMSYU1lZgTSX9UMRhLrGlJx5Q87rScfT7l+8UBt9fnv322yqvO0iTFc13yPMfw/YSOGdK1Ep4OhHaq3faFHiu6ltDzyu3xq5j3HxNev8l492HN1c8Tws09Ik71+xqrVcT4ecx0ljF5kTJ6lmq1Z3udzva1oZ1p1G36o5SOmWs9fnmN4zzgey5FUWLUdUMUS7ZbSaw0kgSBJAj3uar/IQwloVonJOt1jOP43DiCNMkpy0L/8i/gruyOrih19AAAAABJRU5ErkJggg=="},"images":{"fallback":{"src":"/static/d35fd77fe1abce1948a61534ae0683af/d389c/ulb.png","srcSet":"/static/d35fd77fe1abce1948a61534ae0683af/57129/ulb.png 750w,\n/static/d35fd77fe1abce1948a61534ae0683af/3c97c/ulb.png 1080w,\n/static/d35fd77fe1abce1948a61534ae0683af/6ea65/ulb.png 1366w,\n/static/d35fd77fe1abce1948a61534ae0683af/d389c/ulb.png 1592w","sizes":"100vw"},"sources":[{"srcSet":"/static/d35fd77fe1abce1948a61534ae0683af/86b93/ulb.webp 750w,\n/static/d35fd77fe1abce1948a61534ae0683af/4c98a/ulb.webp 1080w,\n/static/d35fd77fe1abce1948a61534ae0683af/e8f75/ulb.webp 1366w,\n/static/d35fd77fe1abce1948a61534ae0683af/30d2a/ulb.webp 1592w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":0.3674623115577889}}},"author":[{"id":"Soohwan Kim","bio":"Co-founder/A.I. engineer at TUNiB.","avatar":{"childImageSharp":{"gatsbyImageData":{"layout":"fullWidth","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAADjElEQVQ4y23Oy48TdQDA8TExEaTttvSBfdHddru7bWc6bWd+8+i0u23n0SdlBRQXZGHDgiiLDwgqXjCIJEaC8cLBmHgwUU9EYzRqQuLJi/4NJB6NF+8evgbOHr7XT76SM5ix7s4QnRHnnm9yZzvBTIswN8JcP5bC67ZoWi7CdtFsn5bloZo+dSNAMYbIIqCmD6mJIVXdR3J6I7r9IQ3T59pZlW+uxzndCbPdC/HZXoq3TikowsfqBOjOmFZ7SrM9p2kfRbXn1O0jKNbsSbJ5BMnu9Gl3+qiiz4OPSvz0QRLHFGwOZH6+neLHT5YRbRerM0J0JrTas/8FZXNKzZgg2es+ZtvDdbs8+iHJl+9lWVP7OG2br26k+PvXJCfmFqoYIpwhTXtMwxpTN0coxhjFmCKbE2rGmKoYPQY9qi2fyzsq//4e5sNXi5TlLqbd5t6lPH/9kuDTG2usqgGi7dO0hzSsIXUzQDaGKGKMLEZUxZCKCJB02+PUpMH9vQwP7ybYnSxyfNrjwumA3dEiD94v8cfnK7xzWsbpujQtH9X0qBs+iuEjC5+a7lPVPSqai9SyelyYFbjkh5hqC3TkKOutLON2nkYpgtuMcT6IszdPslo8SLlcpmUH1A0XRQyQhUtNuFQ1l4o2QFI1h3OTVXbcg+grIfSVBRqlEGopgrYSRi0e4KiIse1mScSeopA/iLADmoZL3Rgg631q+oCq1qeq95FOzhQefpzn7eMpBmqcoBVj04pzwkky0eNMRYIdL8F3twusLe2nslrE6g5pGX1U8/FhD1nvUW1tUJK7SH9+n+DR1zF2vQSvH0lz88wiV45V2J1WuHqsxLXNAnuzNJdfWmK5/BylUgFhb6DZAxR9g7rpIos+Wttja2uE9M9vYb69k+DqfJErWzLOuoVqdKlpDo4jODms4zlFckuHObx4iHwuRi6fYqmYY201x/LqMrnFDNl8gRvvukhNdT9394rcOlNFMxrUhYFmW9imTEsp0mhWKC2nWSokyWSiFA7HSKcXiEb34fayyLVniUQk8rmn2drKIqlqiNcuVrh2ymQS1Nh8sc/GoMEbl7u8eb5D1yqTzkRJJsOkkiGymQVShyLE4yHWKnEq1RjpTIhmI8r2y3mkyloI38uha1n6bpVXrkw5+4LD/S/2uHnrIopaJhZ9hmQqwqHkAXJP8BDhyD46ZoWdMxOGcx/PNfECk/8AbxXdRjRliPoAAAAASUVORK5CYII="},"images":{"fallback":{"src":"/static/a9e6b445142b247ee4cfa66155398bb2/7cf1f/soohwan.png","srcSet":"/static/a9e6b445142b247ee4cfa66155398bb2/34f77/soohwan.png 750w,\n/static/a9e6b445142b247ee4cfa66155398bb2/a94f6/soohwan.png 1080w,\n/static/a9e6b445142b247ee4cfa66155398bb2/7cf1f/soohwan.png 1148w","sizes":"100vw"},"sources":[{"srcSet":"/static/a9e6b445142b247ee4cfa66155398bb2/38420/soohwan.webp 750w,\n/static/a9e6b445142b247ee4cfa66155398bb2/7470d/soohwan.webp 1080w,\n/static/a9e6b445142b247ee4cfa66155398bb2/b5ef6/soohwan.webp 1148w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":0.6829268292682927}}}}]},"fields":{"readingTime":{"text":"6 min read"},"layout":"","slug":"/uniform_length_batching/"}},"next":{"excerpt":"Docker 란? 도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 배가 물건을 컨테이너에 넣어 운반하는 것처럼, 도커도 여러 가지 원하는 프로그램들을 컨테이너에 넣어 배포할 수 있다는 점이 비슷합니다. Docker 주요 개념…","frontmatter":{"title":"Docker란?","tags":["toolkit","environment"],"date":"2021-10-09T10:00:00.000Z","draft":false,"excerpt":null,"image":{"childImageSharp":{"gatsbyImageData":{"layout":"fullWidth","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAAA7DAAAOwwHHb6hkAAABx0lEQVQoz4WST2/TQBTEc0ORggSicCiihIbGSZoAJv8cr2PHju3Ea8ckAlFEkgMcgC8AN0AcEBKiRRWoHPiwP+SFVm4L4jAa7Wrnvdn3piClJIoiMk7T9BweLuZ0TYuNikYUSZIkYfYHMo6J45h8jUL+sFqtWC6XrNdrXr18geMHlJt3uF5vcaWiIWVEksRYI5eR5zGfJUQ5fcaF/OEYSSzpmyZXb2sUtypcLO9w+dYODb3NPInRhcNGq4tuCCaT6d8dKkipLgdDWxUpljVK2zWKN6uUtutcuFGhpnfYbN6nVNPROgbT6X8KWpag2hnQSx+zabiUjRG745hruolmh3hPnzOc7+GHIa7jqDke608K5jtMJhMe7T3h07cj3u8f8vrjZz4cHvHu63eevXnLlx8/2T84UPMOwpCz+lNLyTj7woM0xfMDbH9MY+hxqdljq2tT1g3kLGWxWKjGeWf/dJjFIggCJfDGY4aOQ9+yMYRFGPjIrGn0e9tnI3POYebOGJg0mi0GQtA3Bvh+gLAEQgj0doeR69Lt9bEdB2FZ+EFw2uFJVJJEPTCVsM1uq4XrelSqVSXOoNUbtDtdWnfvKe4ZhnKZj9wvUwhnyJnjfJMAAAAASUVORK5CYII="},"images":{"fallback":{"src":"/static/bd7032b90cf791d74c551dad5e94b8e6/90018/docker.png","srcSet":"/static/bd7032b90cf791d74c551dad5e94b8e6/f503b/docker.png 750w,\n/static/bd7032b90cf791d74c551dad5e94b8e6/e4953/docker.png 1080w,\n/static/bd7032b90cf791d74c551dad5e94b8e6/c2802/docker.png 1366w,\n/static/bd7032b90cf791d74c551dad5e94b8e6/90018/docker.png 1720w","sizes":"100vw"},"sources":[{"srcSet":"/static/bd7032b90cf791d74c551dad5e94b8e6/77272/docker.webp 750w,\n/static/bd7032b90cf791d74c551dad5e94b8e6/317ed/docker.webp 1080w,\n/static/bd7032b90cf791d74c551dad5e94b8e6/b5c49/docker.webp 1366w,\n/static/bd7032b90cf791d74c551dad5e94b8e6/e0b55/docker.webp 1720w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":0.5232558139534883}}},"author":[{"id":"Soohwan Kim","bio":"Co-founder/A.I. engineer at TUNiB.","avatar":{"childImageSharp":{"gatsbyImageData":{"layout":"fullWidth","placeholder":{"fallback":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAADjElEQVQ4y23Oy48TdQDA8TExEaTttvSBfdHddru7bWc6bWd+8+i0u23n0SdlBRQXZGHDgiiLDwgqXjCIJEaC8cLBmHgwUU9EYzRqQuLJi/4NJB6NF+8evgbOHr7XT76SM5ix7s4QnRHnnm9yZzvBTIswN8JcP5bC67ZoWi7CdtFsn5bloZo+dSNAMYbIIqCmD6mJIVXdR3J6I7r9IQ3T59pZlW+uxzndCbPdC/HZXoq3TikowsfqBOjOmFZ7SrM9p2kfRbXn1O0jKNbsSbJ5BMnu9Gl3+qiiz4OPSvz0QRLHFGwOZH6+neLHT5YRbRerM0J0JrTas/8FZXNKzZgg2es+ZtvDdbs8+iHJl+9lWVP7OG2br26k+PvXJCfmFqoYIpwhTXtMwxpTN0coxhjFmCKbE2rGmKoYPQY9qi2fyzsq//4e5sNXi5TlLqbd5t6lPH/9kuDTG2usqgGi7dO0hzSsIXUzQDaGKGKMLEZUxZCKCJB02+PUpMH9vQwP7ybYnSxyfNrjwumA3dEiD94v8cfnK7xzWsbpujQtH9X0qBs+iuEjC5+a7lPVPSqai9SyelyYFbjkh5hqC3TkKOutLON2nkYpgtuMcT6IszdPslo8SLlcpmUH1A0XRQyQhUtNuFQ1l4o2QFI1h3OTVXbcg+grIfSVBRqlEGopgrYSRi0e4KiIse1mScSeopA/iLADmoZL3Rgg631q+oCq1qeq95FOzhQefpzn7eMpBmqcoBVj04pzwkky0eNMRYIdL8F3twusLe2nslrE6g5pGX1U8/FhD1nvUW1tUJK7SH9+n+DR1zF2vQSvH0lz88wiV45V2J1WuHqsxLXNAnuzNJdfWmK5/BylUgFhb6DZAxR9g7rpIos+Wttja2uE9M9vYb69k+DqfJErWzLOuoVqdKlpDo4jODms4zlFckuHObx4iHwuRi6fYqmYY201x/LqMrnFDNl8gRvvukhNdT9394rcOlNFMxrUhYFmW9imTEsp0mhWKC2nWSokyWSiFA7HSKcXiEb34fayyLVniUQk8rmn2drKIqlqiNcuVrh2ymQS1Nh8sc/GoMEbl7u8eb5D1yqTzkRJJsOkkiGymQVShyLE4yHWKnEq1RjpTIhmI8r2y3mkyloI38uha1n6bpVXrkw5+4LD/S/2uHnrIopaJhZ9hmQqwqHkAXJP8BDhyD46ZoWdMxOGcx/PNfECk/8AbxXdRjRliPoAAAAASUVORK5CYII="},"images":{"fallback":{"src":"/static/a9e6b445142b247ee4cfa66155398bb2/7cf1f/soohwan.png","srcSet":"/static/a9e6b445142b247ee4cfa66155398bb2/34f77/soohwan.png 750w,\n/static/a9e6b445142b247ee4cfa66155398bb2/a94f6/soohwan.png 1080w,\n/static/a9e6b445142b247ee4cfa66155398bb2/7cf1f/soohwan.png 1148w","sizes":"100vw"},"sources":[{"srcSet":"/static/a9e6b445142b247ee4cfa66155398bb2/38420/soohwan.webp 750w,\n/static/a9e6b445142b247ee4cfa66155398bb2/7470d/soohwan.webp 1080w,\n/static/a9e6b445142b247ee4cfa66155398bb2/b5ef6/soohwan.webp 1148w","type":"image/webp","sizes":"100vw"}]},"width":1,"height":0.6829268292682927}}}}]},"fields":{"readingTime":{"text":"13 min read"},"layout":"","slug":"/docker/"}},"primaryTag":"nlp"}},
    "staticQueryHashes": ["3170763342","3229353822"]}