지난 글에서는 convex의 성질에 대해서 간단히 살펴보았습니다. 

또 마지막에 convex의 특징에 대해서 설명드렸습니다. 하지만 일일히 convex의 특징을 찾기엔 비용적으로 어려운 부분이 있으니

Hessian이라는 매트릭스를 이용하여 convex인지 아닌지를 더욱 쉽게 판별할 수 있다고 말씀드리면서 마쳤습니다.

그 방법을 알기전에 convex와 concave를 구분짓는 방법부터 살펴보겠습니다.

(기타 예제 및 그림은 KMOOC의 수업자료를 참조하였습니다.)


Convex , Concave?



미분에 대한 이해가 필요합니다. 자세한 설명은 거의 생략하였습니다.

위의 그림은 Hessian matrix, 2차편미분행렬입니다. 이 행렬은 미분을 통해 함수의 방향성을 나타낼 수 있다고 말할 수 있습니다. 

예를 들면 다음 그림과 같습니다.



오른쪽에 보이는 것은 아시는 것과 같이 등고선입니다. 또 여러분은 Gradient가 함수의 이동방향이라고 이해하실 수 있습니다. 

그렇다면 이 함수가 가지는 값이 결국 방향을 나타낼 수 있다고 말할 수 있다는 것입니다. 

이러한 방향성을 담고 있는 것이 Hessian matrix라고 이해하시면 쉽습니다.

먼저 용어부터 알고 가시겠습니다. 다변수 함수 f(x)를 가질 때,

f(x) is strictly convex over X

-> if its Hessian matrix is positive definite for any x in X

f(x) is convex over X

-> if its Hessian matrix is positive semi-definite for any x in X

f(x) is strictly concave over X

-> if its Hessian matrix is negative definite for any x in X

f(x) is concave over X

-> if its Hessian matrix is negative semi-definite for any x in X


구분은 다음 식의 조건에 따라 달라집니다.


이 식이 (h(x)라고 두겟습니다)

1. if h(x)>0, positive definite

2. if h(x) >= 0, positive semi-definite

3. if h(x) <0, negative definite

4. if h(x) <= 0, negative semi-definite 

를 만족하게끔 할 것입니다. 

(단일 변수의 경우, α 의 조건으로 결정하게 됩니다. H를 α 로 보시면 됩니다 ^.^)

다변수에서는 예를 들어보도록 하겠습니다. y = [y1, y2]라고 두었을 때,

첫번째 식과 두번째 식은 대입해보면 convex라는 사실을 알 수 있습니다. 하지만 3번쨰는 그렇지 않습니다.

convex와 concave를 결정할 때, 위의 방법과 같이 결정하게 됩니다. 하지만 이 방법은 문제가 있습니다.

일일히 수를 생각해줘야 하므로 비용이 많이 든다는 점입니다. 즉, 모든 y에 대해 전부 검사하기는 상당히 어려운 일입니다.

따라서 우리는 k-th principle minor 방법을 생각해 볼 수 있습니다. 


Principal Minor

정의는 이렇습니다.

요약하자면 k번째 소 주행렬이란, 매트릭스 H에서 (n-k)만큼의 행과 열을 제거하고 남는 수의 결정자라고 하네요.

예를 보겠습니다.

소 주행렬(principal minor)을 구하는 것은, (n-k)개의 행과 열을 삭제하는 것에서부터 시작됩니다. 

>> matrix H에서 대각행렬은 1st principal minor이 됩니다. (이 때 k 는 2)

>> 행렬 [[1,3], [7,9]](2X2 행렬) 는 2nd principal minor중 하나가 될 것입니다. (k = 1)

>> 전체 행렬은 3번째 소 주행렬이 됩니다.

다음은 선도 주행렬(leading principal minor)에 대해 살펴보겠습니다.

matrix H 가 n by n 이라는 것을 감안하면, 다음 그림과 같이 n개의 선도 주행렬을 가지게 됩니다.


바로 예를 보겠습니다.

행렬 

    에서 

>> Leading principal minors  : D1 = a, D2 = ac - b^2 (여기서 D는 determinant)

>> Principal minors               :   dev1 = a, dev1 = d, dev2 = ac-b^2

(여기서 선도 행렬과 소 주행렬의 차이를 볼 수 있습니다. 선도는 a만 고려하지만 소 주행렬은 a와 c 둘 다 고려하게 됩니다.)

이 됩니다. 거의 마지막에 다왔습니다. 


선도 및 소 주행렬식을 구하면 다음과 같은 조건으로 convex와 concave를 구별하게 됩니다.

(여기서 k는 위의 k와 같은 의미를 가집니다)

• 𝑯 is positive definite if and only if 𝐷 > 0 for all leading principal minors (선도 주행렬 판단)

 𝑯 is positive semi-definite if and only if 𝛥𝑘 ≥ 0 for all principal minors (소 주행렬 판단)

 𝑯 is negative definite if and only if  (−1) 𝑘𝐷 > 0 for all leading principal minors (선도 주행렬 판단)

 𝑯 is negative semi-definite if and only if (−1) 𝑘𝛥𝑘 ≥ 0 for all principal minors (소 주행렬 판단)

바로 예제를 살펴보고 글을 마치도록 하겠습니다. 

(다른 예제는 KMOOC의 수업자료를 참고하시길 바랍니다. 글 길이가 너무 길어져 올리지 않았습니다.)



이 예제에서 함수가 convex인 부분을 원한다면 선도행렬들이 양의 값이 되어야 하겠죠?? 

따라서 12x1 - 36 >=0 이 되는 x값부터가 convex한 부분이라고 할 수 있겠습니다.



이상으로 convex가 무엇인지 간단하게 살펴보았는데요. 

정말 쉽게 생각한다면 위의 선도 주행렬이니 소 주행렬이니 생각하지 마시고, 

convex하면 경사(기울기)를 이용한 문제를 풀기 쉽다. 

또한, 밥그릇 모양을 생각하시면 됩니다 :)


Reference


KMOOC

'# 기타 공부한 것들 > math' 카테고리의 다른 글

Set theory  (0) 2018.07.26
Local Minimum, Local Maximum  (0) 2018.06.21
Convexity(1)  (4) 2018.06.20
Duality Thorey  (0) 2018.06.19
RandomSampling과 hypothesis  (0) 2018.06.18

이 글은 convexity에 대해 정리한 글입니다.


함수가 convex하다. 여러분이 ML을 공부하다 보면 경사하강법을 많이 사용하시게 되는데요. 이때, 함수가 convex하다라고 표현이 가능하면 해의 최적값을 좀 더 빠르고 정확하게 찾을 수 있다는 것을 아실 것입니다.


실제로 유명한 GAN에서도 함수를 conex라고 가정하고 풀고 있죠. 하지만 실제로 convex한지는 증명되진 않았습니다.


여기서 나오는 convex에 대해 정리해보겟습니다.


Convex Set


다음과 같은 그림을 보시길 바랍니다.



집합 X에서 점과 점을 잡고 어떤 선을 그엇을 때, 그 선이 포함하는 점조차도 집합 X에 포함된다.


위의 말이 성립되면 그 집합은 convex하다 라고 표현할 수 있습니다. 


따라서, 위 그림에서는 첫번 째, 두번 째 그림만이 convex하다고 표현할 수 있겟네요.


Convex Set은 다음과 같은 성격을 가집니다.


정리하자면,' convex할 때 상수를 더하거나 곱해도 convex하고, 어떤 convex집합 X, Y가 만났을 때, 그 교집합도 convex하다' 라는 의미입니다.


좀 더 수식적으로 풀어보면 이렇습니다.




첫번째 그림은 두번째 그림으로 설명하겠습니다.


먼저, 빨간선을 할선(secant line)이라고 부릅니다.

 어떤 함수 f(x)에서 점 (x1, x2) 를 선택하여 할선을 그렷을 때, 실제 함수 f가 할선의 선분아래에 있으며, 임의로 다른 점 (x1, x2)을 선택했을 때도 선분 아래에 있다면 convex정의가 성립됩니다.


convex와 strictly convex의 차이는 등호(=)의 차이입니다. 

예를 들어, 두번 째 그림의 경우, 파란색 점 (x1, x2)를 선분으로 그린다고 생각해 봅시다. 그럴경우엔 실제 함수 f와 완벽히 일치하게 됩니다. 이때, convex의 정의인 <=는 성립하지만, <는 성립하지 않게됩니다. 완벽하게 동일하니까요. 그래서 밑 함수는 convex이지만 strictly convex는 아닙니다.



위 그림에서 Linear함수는 완벽히 convex하다고 할 수 있습니다.


다음은 convex의 몇 가지 특징입니다.



함수 -f(x)가 convex하다면 실제함수 f(x)는 concave(오목함수)하다고 표현합니다.


두번째는, 실제함수 f가 convex할 경우, αf(x) 또한 convex이며 α >= 0입니다.




1.  convex하다면 접선 위에 있어야 한다는 것입니다. 다변수의 경우 빨간색으로 표시된 변수처럼 기울기로 표시하면 되겠습니다.

2. 실제 함수 f(x)의 2차미분값이 0보다 크거나 같아야 convex하다는 것입니다. 이를 positive semi-definite라고 표현합니다.(뒤에서 설명)


어떤 Model에서 함수가 convex하다는 것을 증명하는 것은 정말 중요합니다. 그만큼 계산이 쉬워지고 해도 찾기가 상당히 쉬워집니다. 하지만 실제로 convex를 찾으려면 실험도 많이 해봐야하고, 값도 일일히 찾아봐야하는데는 비용이 너무 많이 들겁니다. 

그래서 이용하는 것이 Hessian에서 2차미분 값을 이용하는 방법이 있습니다. -> 다음 글에서 이어나가도록 하겟습니다.



감사합니다


Reference


KMOOC

'# 기타 공부한 것들 > math' 카테고리의 다른 글

Set theory  (0) 2018.07.26
Local Minimum, Local Maximum  (0) 2018.06.21
Convexity(2)  (3) 2018.06.20
Duality Thorey  (0) 2018.06.19
RandomSampling과 hypothesis  (0) 2018.06.18

이 글은 Duality Problem에 대해 간단히 정리한 글입니다.


Duality Theroy


우리는 선형계획에서 optimum(최적값)을 찾기를 원합니다. 또, 만약 최적값을 찾게 되었다면 그에 대한 검증이 필요합니다.


어떤 최적값에 대한 검증에는 하한, 상한으로 검증하게 됩니다. 이 방법이 Dual, 쌍대 문제입니다.


예를 들어서, 밑과 같은 선형문제가 있다고 생각해봅시다.






이 문제에서 각 등식에 y1, y2와 같은 변수를 곱해서 목적식과 비슷하게 만들어주면 간단히 상한을 구할 수 있습니다.(해보시길..)


쌍대 문제로 바꾸게 되면 다음 그림처럼 바뀌게 됩니다.


왜 이런 그림이 나오는지는 다음 그림으로 설명되어질 수 있습니다.


상한을 구하는게 목적인 것을 생각해보면 제약식이 왜 저런 형태를 띄고 있는지를 알 수 있으며, 목적식 또한 그 의미를 알 수 있을 것입니다.


Primal(원문제) 가 최대식이라면 Dual 은 최소로 바뀌게 됩니다. 반대로 Primal이 최소식이라면 Dual은 최대로 바뀌게됩니다.


또한, 하한을 구하기위해 몇 번의 곱셈을 하다보면 Dual의 Dual은 Primal이라는 것을 알 수 있습니다.


즉, 위의 그림과 같이 쌍대문제로 전환하여 W를 구하게 되면 원문제 Z의 상한이 된다는 의미입니다.


Duality Problems : Primal <-> Dual


쌍대 문제에서는 3가지 속성이 존재합니다.


1. 약쌍대성

- > 만약 최대화 문제일 때, 쌍대문제를 통해 값을 도출하였다면 이 값은 원문제의 최적해에 대해 상한이 됩니다.


2. 강쌍대성

-> 쌍대 문제에서의 최소 상한값이 원 문제에서의 optimum값과 같다는 정의입니다.


3. 상보여유정리



상보여유정리는 쉽게 말씀드리자면 다음과 같습니다. 만약 쌍대변수의 값 (그림에서 y1, y2, y3, y4를 의미)이 0이 아닌 경우, 원 문제의 제약식은 등식을 만족해야 합니다.


-> 그림에서 y1, y2가 0이 아닌 양수임을 볼 수 있습니다. 이 의미는 원문제에서 1, 2번째 제약식이 등식을 만족한다는 뜻입니다.(직접 x1, x2의 값을 넣어보십시오). 또한 3, 4번째는 상대변수의 값이 0이 되므로 원문제에서 3, 4번째 제약식은 등식이 성립하지 않습니다.


감사합니다.





Reference


KMOOC 


'# 기타 공부한 것들 > math' 카테고리의 다른 글

Set theory  (0) 2018.07.26
Local Minimum, Local Maximum  (0) 2018.06.21
Convexity(2)  (3) 2018.06.20
Convexity(1)  (4) 2018.06.20
RandomSampling과 hypothesis  (0) 2018.06.18

분야에 상관없이, 항상 데이터셋이 중요하고 그 안에 있는 여러 데이터의 분포가 중요하다고 생각합니다.


이 글은 통계의 아주 기초인 Random Sampling과 가설검정에 대해 간단히 정리한 글입니다.





Random Sampling


우리가 배우는 통계나 확률에서는 간단한 예시를 들어 설명하기 때문에 분포라던가 평균, 분산에 대해서 알기 쉽습니다. 하지만 현실에선 구하기도 어려울 뿐더러 알 방법이 거의 없죠. 그래서 분포를 추정하기 위해 하는 것이 Sampling 기법입니다. 

물론 Sampling을 통해 실제 분포와 내가 아는 분포를 100%는 아니지만 어느정도 가깝게 근사시키는 방법은 여러가지가 있습니다. (글 외의 내용)



예를 들어봅시다. 우리가 모르는 어떤 모집단이 있다고 가정하겠습니다.


우리는 전체 모집단의 '무언가'(보통 평균 또는 분산) 를 알고 싶습니다. 하지만 전체 모집단에 대해서 아는 것이 없기 때문에 Sampling을 진행하게 됩니다. 이를 무작위 표본이라고 정의합니다.


무작위 표본은 두 가지 특성을 가집니다.


1. 동일한 분포인가? Yes 

-> 우리가 뽑은 샘플-1 과 샘플-2는 구별될 수 없기 때문입니다.

예를 들어서, 성인 100명의 키를 측정한다고 했을때, 샘플을 뽑아서 측정을 해보면 거의 차이가 없을 것입니다.


2. 독립적인가? No 

-> 각 샘플들은 독립적이지 않습니다. 왜냐하면 모집단에 영향을 끼칠 수 있기 때문이죠. 하지만 무작위 표본의 특성은 독립적이어야 합니다. 이는 모집단이 매우 커졋을 때 해결할 수 있습니다.


정리하자면, Random Sampling은 독립적이고 동일한 분포를 갖는 동일한 모집단에서 선택된 표본입니다.


설명한 것은 가장 기초인 Random Sampling이고, machine learning에 자주 사용되는 Gibbs Sampling, MH 알고리즘 등은 추후에 쓰도록 하겠습니다.





Hypothesis


어떠한 방법을 통해 모집단의 평균, 분산이 아닌 표본의 평균과 분산을 알게 되었다면, 가설을 통해서 이를 검정할 수 있어야합니다. 


가설은 두 가지로 정의됩니다.


1. 귀무가설 H0

2. 대립가설 또는 연구가설 H1


우리가 알고싶은 어떤 가설에 대해 연관있는 무작위 표본을 선택하여야 합니다. 무작위 표본을 선택하라는 의미는 반복적으로 실험하라는 의미와 동일합니다.


예를 들어, 표본 평균을 검정하게 된다면 밑과 같은 식을 사용하게 됩니다.



이 식은 표본크기와 분산에 영향을 받게 됩니다. 또한, 이를 신뢰구간이라 부릅니다.


쉽게 설명하자면, 표본을 100개 뽑앗을 때, 이러한 표본들은 일정한 구간을 가지게 될 것이고 평균을 가지게 될 것입니다.. 또한, 우리가 설정한 유의수준이 95%라고 가정하였을 때, 표본 평균이 100개 중 95개가 내가 정한 일정한 구간안에 들어와 있음을 의미합니다.


신뢰구간이 표본크기와 분산에 영향을 받는 이유입니다.


표본크기가 클수록, 분산이 작을수록 내가 설정한 신뢰구간에 '무언가'가 많이 분포되어 있어 귀무가설이 힘을 얻고, 그렇지 않다면 연구가설이 힘을 얻는 것이라고 생각해볼 수 있습니다.



-> 파란색 구간은 우리가 설정한 신뢰구간, 막대바는 표본의 신뢰구간(중간은 평균이라고 생각하면 될 것 같네요)



이 신뢰구간은 표본의 크기가 크면 클수록 정규분포를 따르게 됩니다. 예를 들어, 95%의 유의수준에서는 k값이 1.96이 되죠.

표본의 크기가 작으면서 normal하지 않을때는 t분포를 따르게 됩니다. 이를 t-statistics라고 부를 수 있습니다. 다음 그림과 같이 n-1의 자유도를 가집니다.




검정을 하고 나면 주로 p-value를 관찰하여 판단하게 됩니다. 


p-value : 우리가 설정한 귀무가설에 반하여 극단적인 값이 나올 확률


예를 들어 보겠습니다.


유의수준 95%에서


H0 : A가 맞다.

H1 : A가 아니다.

라고 가설을 설정한 뒤, 검정을 시행할 것입니다.


첫번 째 경우는 p-value가 0.2가 나왔을 경우입니다.

 p-value가 0.2라는 뜻은 우리의 모집단에서 A가 아닌 것이 나올 확률이 20%라는 의미로 이해하면 쉽습니다. 따라서, 유의수준 95%에 비해 극단적인 확률값이 아니므로 귀무가설을 기각할 수 없습니다. (귀무가설 자체가 연구가설을 포함하고 있는 가설인 셈이죠)


두번 째 경우는 p-value가 0.001이 나왔을 경우입니다.

p-value값이 0.001이 라는 것은 우리의 모집단에서 A가 나올 확률이 0.1%라는 것입니다. 하지만 test결과, 모집단에서 A가 나왓기 때문에 우리의 모집단이 가지고 있는 귀무가설이 이를 설명할 수 없다는 것이죠. 따라서, 귀무가설을 기각하고 새로운 가설을 설정해야 합니다.

정리하자면,

이는 유의수준 95%에 비해 상당히 극단적인 값이 나왔으므로, 우리의 모집단에서 설정한 귀무가설이 연구가설을 포함하고 있지 않다고 설명할 수 있습니다. 따라서 귀무가설을 기각할 수 있습니다.


(쉽게 설명하려고 한 것이 오히려 더 헷갈리게 하는 것일 수 있습니다. 다른 블로그도 참조하시면 좋을 것 같습니다^^. )



이상으로 기초중의 기초인 Random Sampling과 가설에 대해 설명해 보았습니다. 추가로 1종과오와 2종과오를 간단히 설명하면서 글을 마치겟습니다.




1종 과오 & 2종 과오


1종 과오 : 귀무가설이 참이지만 이를 기각한 것.

2종 과오 : 귀무가설이 참이 아니지만 이를 기각하지 못한 것.


보통 1종과오를 생산자 과오, 2종과오를 소비자 과오라고 부릅니다. 예를 들면,


양품인데 불량이라고 판정을 함 -> 1종 과오 : 불량으로 인식하여 양품 하나를 버리게 되므로 생산자에게 손해가 가는 것이죠.

불량인데 양품이라고 파정을 함 -> 2종 과오 : 불량품이 양품으로 판정되기 때문에 소비자에게 피해가 가게 됩니다.




감사합니다.

'# 기타 공부한 것들 > math' 카테고리의 다른 글

Set theory  (0) 2018.07.26
Local Minimum, Local Maximum  (0) 2018.06.21
Convexity(2)  (3) 2018.06.20
Convexity(1)  (4) 2018.06.20
Duality Thorey  (0) 2018.06.19

오늘도 예제를 하면서 알게 된 몇 가지 사실을 적도록 하겠습니다.

notifyDataSetChanged();

저번에 setAdapter을 onResume부분에 편의상 해두었는데요. 사실 notifyDataSetChanged()가 더 편해요.. ;;

갱신되거나 삭제되었을 때 알려주는 메소드입니다.

구글링 해보니 안먹는 경우도 있다고 한다.


Super.onBackPressed()의 위치

제가 원하는 것은 BackPress를 눌렀을 때 데이터를 intent에 넣어서 전송하는 것이었습니다.

근데 BackPressed 내부에 보시면 super로 부모를 상속하는 것을 볼 수 있습니다. 바로 이 부분이 종료하는 시점이 됩니다.

즉, 눌렀을 때 데이터를 intent에 넣어주고 싶다면, super.onBackPressed()를 맨 아래쪽에 두어야 정상 작동할 거에요.

이런 식으로 맨 밑에 두어야 위의 코드가 정상 작동 됩니다.


ArrayList 초기화

(1) 리스트 초기화

contents 는 ArrayList입니다.

(2) ArrayList 초기화하는 방법 두번째

ArrayList를 사용할 때, add를 굳이 사용하지 않고 간단하게, 한번에 초기화시키고 싶을 때가 있습니다.

이런식으로 하시면 됩니다.

ex)

ArrayList<String> test = new ArrayList<>(Arrays.asList("a", "b", "c"));

또한, Collection을 사용해도 된다고 합니다.

이 사항에 관해서는 더 알고 싶으시다면

>> https://code.i-harness.com/ko/q/f5611

 

 

'# 기타 공부한 것들 > Android' 카테고리의 다른 글

Nevigation View 만들기  (0) 2018.07.26
Toobar, appbar 경계선 없애기  (0) 2018.07.25
Fragment(프래그먼트) 만들기  (0) 2018.07.15
(MAC) Android Studio 단축키  (0) 2018.07.01
Android Project Review with BP(1)  (0) 2018.06.16