<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>koon_and_meme.log</title>
        <link>https://velog.io/</link>
        <description>..</description>
        <lastBuildDate>Sun, 14 Jul 2024 08:05:49 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>koon_and_meme.log</title>
            <url>https://velog.velcdn.com/images/koon_and_meme/profile/fb7b8251-2792-4281-bbd8-6774ede0e5f3/social_profile.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. koon_and_meme.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/koon_and_meme" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[STDP를 사용한 SNN의 학습 과정]]></title>
            <link>https://velog.io/@koon_and_meme/STDP%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-SNN%EC%9D%98-%ED%95%99%EC%8A%B5-%EA%B3%BC%EC%A0%95</link>
            <guid>https://velog.io/@koon_and_meme/STDP%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%9C-SNN%EC%9D%98-%ED%95%99%EC%8A%B5-%EA%B3%BC%EC%A0%95</guid>
            <pubDate>Sun, 14 Jul 2024 08:05:49 GMT</pubDate>
            <description><![CDATA[<p>이번 포스팅 역시 한국어 웹으로 되어있는 자료가 거의 없어서 작정하는 포스팅이다. 이번 글에서는 STDP를 사용하여 SNN이 비지도 학습하여 MNIST 데이터셋을 분류할 수 있는 학습 과정에 대해서 간단하게 알아본다.</p>
<blockquote>
<p>본 블로그는 학생이 직접 공부하고 남기는 기록으로써 잘못된 내용이 있다면 댓글 달아주시면 감사하겠습니다. <del>이번 포스팅은 더더욱 그저 제 이해만으로만 적은 글이기 때문에 그럴 수 있습니다....</del></p>
</blockquote>
<hr>
<h3 id="1-포아송-인코딩possion-encoding">1. 포아송 인코딩(Possion Encoding)</h3>
<p>SNN은 알다시피 각 뉴런의 전도에 대해서 시간 차이가 존재한다. 이미지를 시간당 스파이크가 발생하는 형태로 이미지를 입력해야하는데, 그러기 위해서는 우선 이미지의 각 픽셀을 각 뉴런의 스파이크 발생 빈도로 나타내야 한다.</p>
<p>이 과정에서 Possion Distribution을 사용한다.</p>
<p><strong>Possion Distribution이란?</strong>
단위 시간 내에 어떤 사건이 발생할 횟수를 확률변수로 가지는 확률 분포이다. 다음은 푸아송 분포의 확률질량함수는 다음과 같다.
$$ P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!}
$$</p>
<p>위 식에서 $${k}$$는 시퀀스의 발생 횟수를 뜻하고 $$\lambda$$에는 픽셀의 밝기를 뜻하며 $${P}$$는 사건이 $${k}$$번 발생할 확률을 뜻한다.</p>
<p>푸아송 인코딩에서는 각 픽셀의 밝기가 위의 $$\lambda$$에 할당되어 시간당 스파이크가 몇번 발생할지에 대한 확률 분포가 나타나고 그 확률을 기반으로 랜덤으로 스파이크 발생 횟수를 결정하여 SNN의 입력층에 스파이크 시퀀스를 전달하게 된다.
<img src="https://velog.velcdn.com/images/koon_and_meme/post/39509c7b-4432-4ffe-b785-007f7f763618/image.png" alt=""></p>
<figcaption style="text-align:center; font-size:15px; color:#808080; margin-top:40px">
    출처 https://en.wikipedia.org/wiki/Poisson_distribution
  </figcaption>

<h3 id="2-stdp를-사용한-snn-비지도-학습">2. STDP를 사용한 SNN 비지도 학습</h3>
<p>이미지가 시간당 스파이크의 발생 횟수로 출력층으로 전달된 후에는 초기에 랜덤으로 지정된 시냅스 강도 $${W}$$를 기반으로 입력을 SNN에 통과 시킨다. STDP의 개념에서 알 수 있듯이 LTP와 LTD를 이용해 <strong>출력층 뉴런이 어떤 숫자를 나타내도록 매핑하는 것이 아니라</strong> 출력층 뉴런의 출력이 각 숫자마다 비슷한 활동 전위 발생 양상을 띨 수 있도록 비지도 학습한다. 
<img src="https://velog.velcdn.com/images/koon_and_meme/post/85999e63-190e-49af-8fdf-2ba36b32bb2c/image.png" alt=""></p>
<figcaption style="text-align:center; font-size:15px; color:#808080; margin-top:40px">
    출처 https://towardsdatascience.com/spiking-neural-networks-the-next-generation-of-machine-learning-84e167f4eb2b
  </figcaption>

<p>시냅스 강도의 변화는 </p>
<ul>
<li>시냅스 전 스파이크가 시냅스 후 스파이크보다 Δt만큼 먼저 발생할 때:</li>
</ul>
<p>$$
\Delta w = A_+ \cdot e^{-\frac{\Delta t}{\tau_+}}</p>
<p>$$</p>
<ul>
<li>시냅스 후 스파이크가 시냅스 전 스파이크보다 Δt만큼 먼저 발생할 때:</li>
</ul>
<p>$$
\Delta w = -A_- \cdot e^{\frac{\Delta t}{\tau_-}}
$$</p>
<p>STDP에 대해서 더 알아보고 싶다면 이전 포스팅을 참고하길 바란다.
링크 : <a href="https://velog.io/@koon_and_meme/STDPSpike-timing-dependent-plasticity%EB%9E%80">https://velog.io/@koon_and_meme/STDPSpike-timing-dependent-plasticity%EB%9E%80</a></p>
<h3 id="3-뉴런의-출력을-기반으로-클러스터링">3. 뉴런의 출력을 기반으로 클러스터링</h3>
<p>출력층 뉴런의 스파이크 시퀀스를 이용해 클러스터링을 진행한다.</p>
<h3 id="4-클러스터링-된-이미지-분류">4. 클러스터링 된 이미지 분류</h3>
<p>예를들어 1부터 9까지의 숫자를 학습시켰다면 각 클러스터링 시킨 데이터 군집의 자료를 확인하고 각 군집이 어떤 숫자인지 확인한다</p>
<hr>
<h3 id="마무리">마무리</h3>
<p>너무 공식 없이 어떤 식으로 학습하는지만 말했다. 다음 포스팅은 공식과 함께 나이브하게 구현한 SNN MNIST 분류기에 대해서 포스팅 해보겠다.</p>
<hr>
<h4 id="참고-문헌">참고 문헌</h4>
<ol>
<li>Unsupervided learing of digit recognition using spike-timing-dependent plasticity</li>
<li>Improving multi-layer spiking neural networks by incorporating brain-inspired rules</li>
<li>STDP-based spiking deep convolutional neural networks for object recognition</li>
<li>Stochastic Spiking Neural Networks with First-to-Spike Coding</li>
<li>Deep Learning in Spiking Neural Networks</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[STDP[Spike-timing-dependent plasticity]란?]]></title>
            <link>https://velog.io/@koon_and_meme/STDPSpike-timing-dependent-plasticity%EB%9E%80</link>
            <guid>https://velog.io/@koon_and_meme/STDPSpike-timing-dependent-plasticity%EB%9E%80</guid>
            <pubDate>Sat, 13 Jul 2024 02:05:01 GMT</pubDate>
            <description><![CDATA[<p>요즘 snn에 대해서 공부하고 있는데, 학습 메커니즘 중 STDP라고 하는 것이 있고 한국어로 된 자료가 많이 없길래 어떠한 개념인지 정리해 올려보고자 한다.</p>
<blockquote>
<p>본 블로그는 학생이 직접 공부하고 남기는 기록으로써 잘못된 내용이 있다면 댓글 달아주시면 감사하겠습니다.</p>
</blockquote>
<hr>
<h3 id="spike-timing-dependent-plasticity">Spike-timing-dependent plasticity</h3>
<p>STDP는 시냅스 전 뉴런과 시냅스 후 뉴련의 스파이크(활동 전위)발생 시간 차이에 따라 시냅스 강도가 변화하는 메커니즘이다.</p>
<h3 id="stdp의-주요-특징">STDP의 주요 특징</h3>
<h4 id="1-시간-의존성">1. 시간 의존성</h4>
<p>시냅스 전 세포의 스파이크와 시냅스 후 세포의 스파이크 간의 차이가 시냅스 강도 변화의 방향과 크기를 결정한다. 시냅스 전 세포가 시냅스 후 세포보다 먼저 스파이크를 발생시키면 시냅스가 강화되고, 반대의 경우에는 시냅스가 약화된다. </p>
<blockquote>
<p><strong>여기서 시냅스가 강화된다는 말은 무엇일까?</strong>
시냅스 전 뉴런이 먼저 스파이크를 발생시키고 이후에 시냅스 후 노련이 스파이크를 발생시키면, 시냅스 후 뉴런의 활동이 시냅스 이전 뉴런의 활동에 의해 유도된것으로 간주될 수 있고 이것은 다음과 같은 방식으로 설명될 수 있다.</p>
</blockquote>
<ul>
<li>신경 전달 물질의 증가</li>
<li>수용체의 민감도 증가</li>
<li>시냅스 구조의 변화
위와 같은 현상들을 시냅스 강화라고 부른다.</li>
</ul>
<h4 id="2-ltp와-ltd">2. LTP와 LTD</h4>
<p><strong>- LTP[Long-Term Potentation]</strong> : 시냅스 전 스파이크가 시냅스 후 스파이크보다 먼저 발생할 때 시냅스 강도가 증가하는 것을 의미
<strong>- LTD[Long-Term Depression]</strong> : 시냅스 후 스파이크가 시냅스 전 스파이크보다 머넞 발생할 때 시냅스 강도가 감소하는 것을 의미</p>
<blockquote>
<p><strong>여기서 시냅스가 약화된다는 말은 무엇일까?</strong>
시냅스의 효율성이나 강도가 감소하는 현상을 의미하며 이는 신경세포 간의 정보 전달이 약하지는 것을 의미한다</p>
</blockquote>
<ul>
<li>시냅스 후 뉴런의 스파이크 후 시냅스 전 뉴런의 활동</li>
<li>칼슘 농도 변화</li>
<li>신경 전달 물질 수용체
위와 같은 현상들로 시냅스 약화가 일어날 수 있다.</li>
</ul>
<h4 id="3-비선형성">3. 비선형성</h4>
<p>시간 차이에 따른 시냅스 강도 변화는 비선형적이다. 즉, 시냅스 전후 스파이크의 시간차이가 클 수록 시냅스 강도 변화의 크기가 감소한다.</p>
<h3 id="stdp의-수식적-표현">STDP의 수식적 표현</h3>
<p>STDP를 수식으로 표현하면 다음과 같다</p>
<ul>
<li>시냅스 전 스파이크가 시냅스 후 스파이크보다 Δt만큼 먼저 발생할 때:</li>
</ul>
<p>$$
\Delta w = A_+ \cdot e^{-\frac{\Delta t}{\tau_+}}</p>
<p>$$</p>
<ul>
<li>시냅스 후 스파이크가 시냅스 전 스파이크보다 Δt만큼 먼저 발생할 때:</li>
</ul>
<p>$$
\Delta w = -A_- \cdot e^{\frac{\Delta t}{\tau_-}}
$$</p>
<p>여기서 $$
A_+$$ 와 $$A_-$$는 시냅스 가소성의 크기를 결정하는 상수이며, $$\tau_+$$와 $$\tau_+$$는 시간 상수이다.</p>
<h3 id="생리학적-기초">생리학적 기초</h3>
<p>STDP는 실제 생리학적 실험을 통해 발견되었으며, 여러 신경세포에서 확인되었다. 이러한 실험들은 신경 회로가 어떻게 환경에 적응하고 학습하는지 이해하는데 중요한 단서를 제공한다. 특히 STDP는 해마(hippocampus)와 같은 기억 형서엥 중요한 뇌 영역에서 활발히 연구되고 있다.</p>
<hr>
<h4 id="참고-문헌">참고 문헌</h4>
<ol>
<li><a href="https://www.nature.com/articles/s41380-023-02027-w.pdf">https://www.nature.com/articles/s41380-023-02027-w.pdf</a></li>
<li><a href="https://www.frontiersin.org/journals/synaptic-neuroscience/articles/10.3389/fnsyn.2011.00004/full">https://www.frontiersin.org/journals/synaptic-neuroscience/articles/10.3389/fnsyn.2011.00004/full</a></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[SNN[Spiking Neural Network]에 대해 알아보자]]></title>
            <link>https://velog.io/@koon_and_meme/SNNSpiking-Neural-Network%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90</link>
            <guid>https://velog.io/@koon_and_meme/SNNSpiking-Neural-Network%EC%97%90-%EB%8C%80%ED%95%B4-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90</guid>
            <pubDate>Fri, 12 Jul 2024 10:55:26 GMT</pubDate>
            <description><![CDATA[<p>평소 인공신경망에 관심이 있어 인공신경망이 인간의 뇌 뉴런의 구조를 따라했다는 것은 알고 있었지만, 최근 생명과학과에서 배운 내용 중 흥분성 시냅스, 억제성 시냅스에 관련된 내용과 인공신경망을 연관지은 논문이 있는지 찾아보던 도중 NN(Neural Network)보다 더 실제 두뇌와 비슷한 SNN(Spiking Neural Network)에 대해서 알게 되어 내용을 정리해보고자 한다.</p>
<blockquote>
<p>본 블로그는 학생이 직접 공부하고 남기는 기록으로써 잘못된 내용이 있다면 댓글 달아주시면 감사하겠습니다.</p>
</blockquote>
<hr>
<h2 id="spiking-neural-network">Spiking Neural Network</h2>
<p>Spiking Neural Network은 생물의 신경망을 모방한 모델으로 일반적인 NN과는 다르게 실제 생명체의 뇌에서 신경이 전달 될 때 역치 이상의 자극이 주어져야만 신경 전도가 일어나는 것 처럼 일정 threshold 이상의 값에만 반응하여 Spike라고 부르는 출력이 생성되는 것이 측징이다. 당연히 NN과는 다르게 정보가 이산적으로 전달된다.</p>
<p><img src="https://velog.velcdn.com/images/koon_and_meme/post/8d91593f-0fe8-4850-b936-c104a64f770b/image.png" alt=""></p>
<p>위의 그림은 두개의 뉴런이 연결되어있고, pre 뉴련이 post 뉴런에게 3번의 Spike를 보내고 있다. 사진의 파란색으로 채색된 그래프는시간에 따른 post Neuron의 활동전위를 나타내고 세번째 Spike가 임계값(threshold)인 u_th(생명과학에서는 역치 이상의 자극)을 넘게되고, 그와 동시에 post Neuron의 활동전위 값이 0으로 초기화 되는 것을 볼 수 있다. 그 동시에 또한 post Neuron이 Spike를 생성했음을 아래의 그래프에서 볼 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/koon_and_meme/post/a5dc998c-8f7b-493f-b602-db98bb6bae52/image.png" alt="">
여러개의 Pre Neuron들이 연결되어 있을 때에도 동일하다. 시간축에 따라 Pre Neuron들의 Spiking을 받고 Post Neuron의 활동전위가 임계값을 넘게 되면 Post Neuron은 Spiking을 생성해 낸다 위 그림애서 refractory preiod라고 적혀있는 것은 한국말로 불응기를 뜻하며 실제 뉴런에서와 비슷하게 Post Neuron들의 Spike가 들어오더라도 반응하지 않는 순간을 뜻한다.</p>
<hr>
<h2 id="snn의-장단점">SNN의 장단점</h2>
<h3 id="1-낮은-전력-소모">1. 낮은 전력 소모</h3>
<p>뉴런 자체의 연산은 모르지만, SNN 네트워크 내부의 레이어에서의 정보의 전달은 아날로그적으로 일어난다. 무거운 행렬연산이 필요한 다른 tensor 기반의 인공신경망에 비해서 회로 레벨에서 직접적으로 신경망 구동을 설계할 수 있고 SNN이 상용화 될 경우 Robotics와 Edige computing 시장에서 매우 활발하게 사용될것으로 예상된다.</p>
<h3 id="2-bio-plasuible">2. Bio-Plasuible</h3>
<p>Spiking을 이용하여 정보를 전달한다는 컨셉은 실제 동물의 뇌의 작동 방식에서 영감을 받았다. tensor 기반 인공신경망인 경우 구조적으로 동물의 신경망에서 영감을 받았다고 할 수 있지만 신경망을 학습 할때 경사하강법과 같은 Global Optimization Rule을 사용한다는 점에서 생물학적으로 타당하다고 할 수 없다. 생물학적으로 가장 올바른 모델 중 하나인 Hodgkin-Huxely model의 경우 머신러닝을 위해서가 아니라 실제 생물의 활동전위를 수학적으로 모델링하기 위해 고안된 만큼 SNN은 생물학에 뿌리를 두고 있다. 동물 뇌의 학습 방법에 대한 연구가 진행됨에 따라 SNN의 잠재능력 또한 커질 수 있다는 특징이 있다. 이러한 특징은 농물의 뇌를 컴퓨터로 모델링 및 시뮬레이션하는 분야에 관심이 있는 머신러닝 연구자들로 하여금 관심을 가지게 한다. <del>특히 나 같은 경우...</del></p>
<h3 id="단점--효과적인-학습방법이-없다">단점 : 효과적인 학습방법이 없다</h3>
<p>이러한 장정들이 있음에도 여전히 상용화 되고있지 못한 이유는 아직까지 효과적인 SNN의 지도학습방법을 찾지 못했다는 것이다. STDP, ReSuMe, Dopamine-modulates STDP등 다양한 학습 방법이 존재하지만 DNN만큼 경제적이고 효율적인 수준은 아니다. 하지만 DNN 또한 1950년에 고안되었지만 Gradient vanishing(그레디언트 소실 문제), 데이터 부족 등의 이유로 3번의 시대적 비수기를 겪고나서야 본격적으로 상용화 되기 시작한 것과 같이 SNN만의 특징들이 그 메리트를 잃지 않는 한 SNN의 상용화를 위한 연구개발은 계속 될 것이다.</p>
<hr>
<h4 id="참고-문헌">참고 문헌</h4>
<ol>
<li><a href="https://jinprelude.github.io/posts/SNN-Basic-Tutorial-1-Spiking-Neural-Network%EB%9E%80/">https://jinprelude.github.io/posts/SNN-Basic-Tutorial-1-Spiking-Neural-Network%EB%9E%80/</a></li>
<li><a href="https://pubs.aip.org/aip/jap/article-abstract/124/15/152002/347817/Tutorial-Neuromorphic-spiking-neural-networks-for?redirectedFrom=fulltext">https://pubs.aip.org/aip/jap/article-abstract/124/15/152002/347817/Tutorial-Neuromorphic-spiking-neural-networks-for?redirectedFrom=fulltext</a></li>
</ol>
]]></description>
        </item>
    </channel>
</rss>