[컴] 정보이론에서 entropy

information theory

정보이론에서 entropy

자세한 이야기는 ref. 1, 2, 3 을 통해 배우자.

모든 사건이 같은 확률로 일어나는 것이 가장 불확실하다.즉, 랜덤하게 사건이 일어나는 것이 제일 확실하다. 예를 들어, 우리가 동전던지기를 한다고 했을 때도, 한번은 앞면, 다른 한번은 뒷면, 이렇게 계속 ’앞뒤앞뒤’로 나오는 것이 가장 불확실하다.

’엔트로피(entropy)’는 이 불확실한 정도를 이야기 한다. 즉,

  • 사건이 랜덤하게 일어나는 경우
    –> 각 사건이 발생하는 확률이 random하다.
    –> 제일 확실한 경우이다.
    –> 불확실성이 낮다.
    –> entropy 값이 가장 낮다.
  • 사건이 규칙적으로 일어나는 경우
    –> 각 사건이 발생하는 확률이 다 같다.
    –> 제일 불확실한 경우이다.
    –> 불확실성이 높다.
    –> entropy 값이 가장 높게 된다.

entropy 란, 최적의 전략하에서 그 사건을 예측하는 데에 필요한 질문 개수를 의미한다.
이 말은 곧 최적의 전략 하에서 필요한 질문개수에 대한 기댓값을 구하면 된다는 뜻이다.
entropy 가 감소한다는 것은 우리가 그 사건을 맞히기 위해 필요한 질문의 개수가 줄어든다는 이야기다.

위의 사건이 발생하는 경우와 연관지어서 이야기해보면,

  • 사건의 발생확률이 한쪽으로 몰려있다.
    --> 필요한 질문 개수의 평균은 줄어들게 된다.
    --> 적은 질문으로 어떤 사건이 일어날 지 맞출 수 있기 때문이다.
    --> 그 사건을 예측하는데 필요한 질문 개수가 작다

만약 아래와 같은 이산확률분포(discrete probability distribution)가 있다고 하자.

  • A 가 나오는 확률은 50% = 1/2
  • B 가 나오는 확률은 12.5% = 1/8
  • C 가 나오는 확률은 12.5% = 1/8
  • D 가 나오는 확률은 25% = 1/4

그러면, 처음에 나오는 문자가 뭔지를 알려면 몇번의 질문을 해야 할까? 이것에 대한 자세한 설명은 ref. 1 을 보면 된다.

결과적으로, 아래처럼 1개의 글자를 추려내기 위해서는 평균적으로 1.75개의 질문을 하면 된다는 결론이 난다.

\(p(A) \cdot 1 + p(B) \cdot 3 + p(C) \cdot 3 + p(D) \cdot 2 = 1.75\)

각 문자를 판단하기 위해 하는 질문횟수는 다음과 같다.

  • A는 1번 : \(\log_2(\frac{1}{1/2})\)
  • B는 3번 : \(\log_2(\frac{1}{1/8})\)
  • C는 3번 : \(\log_2(\frac{1}{1/8})\)
  • D는 2번 : \(\log_2(\frac{1}{1/4})\)

즉, 아래와 같은 식이 성립한다.

\((사건발생확률) \cdot log_{2}(\frac{1}{사건발생확률})\)

그리고, 이것을 모든 경우에 대한 값을 합산하면 아래와 같이 된다. 이것이 entropy 이다. 이 entropy 를 \(H\)라고 정의하자.

\(\begin{align} H & = \sum (사건\,발생확률) \cdot \log_2(\frac{1}{사건\,발생확률}) \\ & = \sum_i p_i \ \log_2(\frac{1}{p_i})\\ & = - \sum_i p_i \ \log_2(p_i) \end{align}\)

Reference

  1. 초보를 위한 정보이론 안내서 - Entropy란 무엇일까

[컴][머신러닝] Markov Chains 설명

Markov chain / 마르코브 / 마르코프 체인 /

Markov Chains 설명

각 사건의 확률이 이전 사건에서 얻은 상태에만 의존하는 일련의 가능한 사건들을 설명하는 확률적 모델(stochastic model)이다. 비공식적으로 이것은 “그 다음에 무슨 일이 일어날지는 오직 지금 상황에 달려 있다”고 생각할 수 있다.[ref. 4]

See Also

  1. 쿠…sal: [컴] 조건부 확률 설명, conditional probability : '마르코브 체인'은 현재사건의 확률이 이전 사건에서 나온 상태에서 시작한다. 그래서 '조건부확률' 과 같은 뜻이라고 볼 수 있다. $P(A_{2}|A_{1})$ 라고 하면 '$P(A_{1})$ 이 일어난 후, 그 사건을 100%로 놓은 상황에서 $P(A_{2})$ 가 일어날 확률'이 되기 때문이다.
  2. 조건부 확률부터 마르코프까지 - 4) 마르코프 체인: '마르코프체인'과 나이브베이'의 차이를 이야기 해준다. 참고로, 둘다 조건부확률이다.

Reference

  1. Markov Chains explained visually
  2. Examples of Markov chains - Wikipedia
  3. 마르코프 체인 (Markov Chain) 정의 및 예시
  4. Markov chain - Wikipedia

[컴] 조건부 확률 설명, conditional probability

 visualization / visual explain

조건부 확률 설명, conditional probability

이미지로 설명

위 링크를 보면서 이해를 시도하면 좋다. 움직이는 이미지로 되어 있고, 값을 변경하면서 작업해 볼 수 있어서 이해하기가 좋다.

설명

여기서 사용할 수학용어는 다음과 같다.

  • \(P(A)\) : A가 일어날 확률
  • \(P(B)\) : B가 일어날 확률
  • \(P(A n B)\) : A와 B가 같이 일어날 확률

조건부 확률은 \(P(B|A)\) 로 표현된다. \(P(B|A)\) 가 뜻하는 바는 ’A가 일어났는데, 그 상황에서 B도 일어난 확률’이다.

이것은 마치 \(P(A n B)\) 를 이야기하는 것 같다. 하지만 차이가 있다.

차이는 ’\(P(A n B)\) 는 전체에 대해서 A와 B가 같이 발생한 확률’을 이야기한다.
그러나 \(P(B|A)\) 는 A가 일어난 상황을 ’전체’로 놓고, B가 일어날 확률을 알아보는 것이다.

그래서 만약 각 확률이 다음과 같다고 가정해 보자.

  • \(P(A)\) : 30%
  • \(P(B)\) : 30%
  • \(P(A n B)\) : 10%

그러면 \(P(B|A)\) 는 33.3% 가 된다.

\(P(A)\) 가 전체가 되고, 거기서 B가 일어날 확률(\(P(B)\))을 보는것이다. \(P(A)\)가 전체이기 때문에, B가 일어난 확률중에서 A와 같이 일어난 확률(\(P(A n B)\))만 보는 것이다.

  • \(\frac{P(A n B)}{P(A)} = \frac{0.1}{0.3} = 33.3%\)

[컴] 안드로이드가 접속검사 를 위한 트래픽을 vpn 외부로 보내는 이슈

android

안드로이드가 접속검사 를 위한 트래픽을 vpn 외부로 보내는 이슈

MUL22-03 라는 이슈에 대한 이야기

안드로이드(Android) 는 connectivity check 를 VPN 터널 외부로 전송한다. 이 전송은 기기가 Wifi 네트워크에 접속될때마다, 심지어 “Block connections without VPN”가 켜져(enabled)있을때도 이뤄졌다.

이유 :

네트워크에 캡티브 포털(captive portal)이 있는 경우 사용자가 로그인할 때까지 연결을 사용할 수 없다. 따라서 대부분의 사용자는 캡티브 포털 검사가 수행되어 포털을 표시하고 사용할 수 있기를 원하기 때문에, 이런 동작을 한다.

  • Block connections without VPN : 여기를 보면, VPN 이 켜져있을때만 사이트에 접속하게 해주는 VPN app 들이 대체적으로 갖고 있는 option 인 듯 함.
  • captive portal : 예를 들어 우리가 공용 wifi 를 사용하려면, 아래처럼 화면이 뜬다. 이런 화면을 뿌려주는 곳을 captive portal(참고: Captive portals - Windows drivers | Microsoft Learn) 이라고 한다.

그러나 특정 위협 모델을 사용하는 일부 사용자에게는 개인 정보 보호 문제가 될 수 있습니다. 안드로이드가 이 트래픽을 유출하는 것을 막을 방법이 없어 보여서, 우리는 안드로이드 이슈 추적기에 보고했습니다.

보안문제(privacy concerns)

  • 연결시점에 보내는 data 자체는 많은 정보가 없지만, source ip address 같은 meta 정보가 wifi AP 의 위치데이터 등과 결합되어서 추가정보를 도출하는 데 사용될 여지가 있다.
  • 하지만, 이런 익명화 해제 시도(de-anonymization) 는 상당히 복잡한 actor 를 필요로 해서, 대부분의 user 에게는 상당한 위험이 될 수 없을 것.

See Also

  1. iOS Can Stop VPNs From Working as Expected—and Expose Your Data | WIRED, 2022-08-19

Reference

  1. Android leaks connectivity check traffic - 블로그 | Mullvad VPN, 2022-10-10
  2. 안드로이드에서는 설정을 변경해도 일부 트래픽이 늘 샌다 : 클리앙, 2022-10-12

[컴] blogger 의 본문에 edit 버튼을 보이게 하는 법

편집 버튼 / blogspot / post body edit button / howto show the edit button in the post / 블로그

blogger 의 본문에 edit 버튼을 보이게 하는 법

다음은 Contempo 테마를 사용했을 때의 구조이다. 여기서 postQuickEdit 라는 includable 을 추가했다. 그리고 post includable 에 추가했다.

주의할 점은 html 의 size 가 너무 크면 update 가 안되는 듯 하다. 그래서 indent 의 space 를 2로 설정해서 작업했다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html ...>
  ...
  <body>
    ...

    <div class='page'>
      ...

      <b:with value='data:widgets.AdSense any (w =&gt; w.sectionId == &quot;ads&quot;)' var='hasVerticalAds'>
        <div class='page_body'>
          ...

          <div class='centered'>
            ...
            <div>
              ...
              <main class='centered-bottom' id='main' role='main' tabindex='-1'>
                ...
                <b:section class='main' id='page_body' name='Page Body' showaddelement='false'>
                  ...
                  <b:widget id='Blog1' locked='true' title='블로그 게시물' type='Blog' version='2' visible='true'>
                    <b:widget-settings>
                      <b:widget-setting name='showDateHeader'>false</b:widget-setting>
                      ...
                    </b:widget-settings>
                    ...
                    <b:includable id='post' var='post'>
                      <div class='post'>
                        <b:include data='post' name='postMeta' />
                        <b:include data='post' name='postTitle' />

                        <b:include name='headerByline' />
                        <b:if cond='data:view.isSingleItem'>
                          <b:include data='post' name='postBody' />
                          <b:include data='post' name='postQuickEdit' />
                          
                          <b:else />
                          <b:include data='post' name='postBodySnippet' />
                          <b:include data='post' name='postJumpLink' />
                        </b:if>
                        <b:include data='post' name='postFooter' />
                      </div>
                    </b:includable>
                    <b:includable id='postQuickEdit' var='post'>
                      <b:if cond='data:view.postId'>
                        <a expr:href='&quot;https://www.blogger.com/blog/post/edit/&quot; + data:blog.blogId + &quot;/&quot; + data:view.postId' title='edit'>
                          <img alt='' class='icon-action' height='18' src='https://resources.blogblog.com/img/icon18_edit_allbkg.gif' width='18' />
                        </a>
                      </b:if>
                    </b:includable>
                    ...
                  </b:widget>
                  ...
                </b:section>
              </main>
            </div>
            ...
          </div>
        </div>
      </b:with>
    </div>
    ...
  </body>
</html>

[컴] 작업표시줄에서 ‘뉴스 및 관심사’ 끄는 법

윈도우즈 windows 10

작업표시줄에서 ‘뉴스 및 관심사’ 끄는 법

2022-10 x64 기반 시스템용 Windows 10 Version 21H2 에 대한 누적 업데이트(KB5018410) 이후, ’작업표시줄’에 날씨가 보인다.

이 날씨를 안보이게 하려면 다음과 같이 하면 된다.

  • ’작업표시줄’에서 오른쪽 마우스 버튼 클릭 –> 뉴스 및 관심사 –> 끄기 선택

[컴][머신러닝] stable diffusion model 에 특정 사진(이미지)를 적용

 

자기 친구 얼굴 넣어서 이미지 생성 / ai 이미지 특정인물 / 내 얼굴 / image ai image / generative model / ai 이미지 / text to image / 글쓰면 이미지 / 단어로 이미지

stable diffusion model 에 특정 사진(이미지)를 적용

요즘 hot 한 stable diffusion model 인데, 특정인물의 얼굴을 넣어서 이미지를 만드는 방법이다. 아래 유투브를 보면 무슨말인지 이해가 쉽다.

stable diffusion 체험해보기