[작성자:] snowall
-
Stochastic Parallel Gradient Descent method
SPGD알고리즘은 함수 최적화를 할 때 사용하는 알고리즘이다. 기존의 Steepest descent method라든가 Conjugate Gradient method같은 경우, 특정 방향에 대해서 최적해를 찾고 그 위치에서 그 다음으로 진행할 방향을 선택해서 더이상 움직이지 않을 때 까지 반복하는 알고리즘이다. 두 방법의 차이는 그 다음 방향을 결정하는데 좀 더 개선된 방법이냐 아니냐의 차이가 있을 뿐이다.
SPGD알고리즘은 통계적으로 접근하는데, 덕분에 빠른 최적화가 가능하다. 수학적, 통계학적인 이야기는 다 빼고 알고리즘만 설명하도록 한다. 자세한 것은 구글에 검색하면 다 나올 것이다.
어떤 함수 V(x)가 주어져 있다. V(x)는 하나의 실수값을 갖고, x는 N차원에서의 벡터이다. g는 0이 아닌 어떤 실수인 상수인데, 이따가 설명하도록 하겠다.
1. x에 대해서 어떤 임의의 벡터 a를 선택한다.
2. P=V(x+a), Q=V(x-a)를 계산한다.
3. P-Q=R을 얻을 수 있을 것이다.
4. x를 x+g*R*a로 교체하고 1번으로 돌아가서 반복한다.
5. 더이상 움직이지 않을 때 까지(==V(x)와 V(x+g*R*a)가 별로 차이가 없을 때 까지) 반복한다.
이 알고리즘이 작동하는 이유는 R=P-Q이기 때문이다. g>0인 경우에 만약 P가 더 크다면 R>0이므로 벡터가 x+a방향으로 움직이게 된다. 만약 Q가 더 크다면 R<0이므로 벡터가 x-a방향으로 움직이게 된다. 여기서 g>0이면 V가 커지는 방향으로 최적화가 이루어지고, g<0이면 V가 작아지는 방향으로 최적화가 이루어진다.
a자체는 임의로 고르지만 대체로 난수 함수가 0~1사이에서 하나를 고르게 되어 있으므로 a의 최대 크기는 제한적일 것이다. 만약 V가 엄청 큰 공간에서 최적화 해야 하는 경우라면, 이것은 너무 느릴 수 있을 것이다. 따라서 g가 충분히 큰 숫자가 되어야 한번에 멀리 갈 것이다. 내가 봤던 논문에서는 최대화 하는 경우 g를 한 스텝 지나갈 때 마다 g/V로 교체하고, 최소화 하는 경우 g를 한 스텝 지나갈 때 마다 g*V로 교체하는 것을 보았다.
실제로 계산에 적용해보면 g/V나 g*V를 그냥 두면 스텝 수가 너무 많아지는 경우 g값이 무한대로 발산하거나, 무한소로 수렴한다. 무한대가 되는 경우 컴퓨터 계산 범위를 넘어가므로 오류가 발생하고, 무한소가 되는 경우 0이 되어 버리므로 아예 움직이지 않게 된다. 따라서 이런 경우를 방지하기 위해 알고리즘을 구현하는 과정에서 적절한 수준에서 크기를 재조절 해주어야 한다.
이렇게 했어도 결국 최적화 지점 근처에서 한번에 너무 멀리 가버리면 망하는데, 그래서 a에 R을 곱해주는 것이다. R의 부호는 최적화 방향을 결정하고, R의 크기는 한 스텝의 크기를 조절한다. R은 최적화 지점에 가까워질 수록 그 크기가 작아지므로 최적화 지점 근처에서 천천히 움직이게 해 준다. 또한, 실수로 너무 멀리갔을 경우 다시 무작위로 크게 움직이도록 하므로 최적화 속도를 빠르게 할 수 있다.
이 알고리즘의 수렴성은 통계적으로 보장된다. 즉, 무한히 오래 돌리면 반드시 최적점에 수렴한다. 하지만 이것은 반대로 문제가 되는 부분이기도 한데, R의 크기가 계속해서 작아지므로 수렴 속도가 점점 느려진다. 그래서 최적점 근처에서 “운이 좋아서” 최적점에 매우 가까운 점으로 뛰어들지 않는다면 계속해서 최적점 근처에서 헤메고 다닐 수 있다.
-
쑥국-아내에게 / 최영철
쑥국-아내에게 / 최영철 참 염치없는 소망이지만 다음 생애 딱 한번만이라도 그대 다시 만나 온갖 감언이설로 내가 그대의 아내였으면 합니다 그대 입맛에 맞게 간을 하고 그대 기쁘도록 분을 바르고 그대 자꾸 술 마시고 엇나갈 때마다 쌍심지 켜고 바가지도 긁었음 합니다 그래서 그래서 지금의 그대처럼 사랑한다는 말도 한번 못 듣고 고맙다는 말도 한번 못 듣고 아이 둘 온 기력을 뺏어 달아난 쭈글쭈글한 배를 안고 골목 저편 오는 식솔들을 기다리며 더운 쑥국을 끓였으면 합니다 끓는 물 넘쳐 흘러 내가 그대의 쓰린 속 어루만지는 쑥국이었으면 합니다 -
스나크 사냥(1) – 서문 part 1
The Hunting of the Snark (by Lewis Carroll)
https://www.gutenberg.org/ebooks/13
이번엔 영문학의 고전, 스나크 사냥을 공부해 보자. 자세한건 검색해 보시고, 원문은 위에 있는 링크에서 구할 수 있으므로 번역문이나 설명 없이 원문을 보고 싶으면 참고하자.
일단 서문부터 시작한다. 연재는 시간 날 때마다 짬짬히 할 예정이다. 해설은 한 문장 단위로 진행할 것이다.
THE HUNTING OF THE SNARK
an Agony in Eight Fits
by
Lewis Carroll
일단 제목부터 난감한 작품이다. 윗줄은 “스나크 사냥”이라는 것을 알겠다. 물론 Snark는 저자인 루이스 캐럴이 만들어낸 괴물의 이름으로, 딱히 우리말로 번역 할만한 말이 없는 고유명사이다. 그 밑에 있는게 문제인데, Agony in fits를 어떻게 해석할 것인가? 일단, 앞에 eight이라는 수가 붙어있고 fit다음에 S가 붙어서 복수형을 나타내고 있으니 Fit은 명사다. 사전에서 fit이 명사인 경우를 찾아보면 “경련”이나 “발작”같은 뜻이 나온다. Agony는 “극도의 괴로움”이라고 되어 있다. 그러니, 이 작품의 부제는 “여덟 번 발작하는 괴로움”이라는 뜻이다. 이상하다. 그래서 Fit을 더 찾아보면 고어에서는 “노래의 한 구절”이라는 뜻이 있다. 이 작품은 형식이 시(poem)이므로 노래에 해당하고, 따라서 노래의 한 구절로 해석하는 것이 적절하다. “여덟 구절에 담긴 괴로움”이 괜찮을 것 같다.
PREFACE
서문.
If–and the thing is wildly possible–the charge of writing nonsense were ever brought against the author of this brief but instructive poem, it would be based, I feel convinced, on the line (in p.4)
“Then the bowsprit got mixed with the rudder sometimes.”
마침표가 여기에 찍혀 있으므로 여기까지 한 문장이다. 이 문장을 해석하기 위해서 일단 문장의 본동사를 찾아야 하는데, 그것은 would be이다. 즉, 이 문장의 주절은 it would be based on the line이 된다. 이것만 해석해 본다면 “그것은 그 줄에 기반했을 수 있다”로 쓰면 된다. 이제 it이 무엇인지 찾아보고, the line이 어떤 내용인지 알아봐야 한다. 일단 it은 그 앞에 나오는 어떤 명사를 뜻하는 대명사이다.
앞에 If절로 시작했으니 이건 부사절인데, if절의 동사가 were이고, 그 앞에 있는 주어 the charge는 단수이므로 이건 가정법 과거이다. 심지어, 그 중에서도 불가능한 상황에 대한 가정이다 the charge of writing nonsense는 “헛소리를 쓴다는 책임”정도가 어떨까? 그리고 그게 were brought이니, 누군가가 그 책임을 갖다가 던져준 것이다. Against the author of this brief but instructive poem에서, this poem은 지금 우리가 읽고 있는 이 시를 뜻하므로, 여기서 저자는 시의 성격을 밝히고 있다. Brief는 간결하다는 뜻으로 쓰였고, instructive는 설명적이라는 뜻이다. Brief but instructive는 “간결하지만 설명적”이라는 뜻인데, 이게 but으로 연결되었으므로 여기서는 “뺄 건 뺐고 있을 건 다 있다”는 뜻으로 해석하면 될 것이다. “어쨌든 이 시의 저자에 대항해서 헛소리를 써야 한다는 책임이 주어진다면, 그것은 아마 다음의 한 줄 때문일 것이다.” I feel convinced는 중간에 끼어들어가 있는데, 결국 이건 “난 이거면 되는 것 같은데”라는 뜻이다. 중간에 the thing is wildly possible은 “그게 폭넓게 가능하다”.
In view of this painful possibility, I will not (as I might) appeal indignantly to my other writings as a proof that I am incapable of such a deed:
이 문장은 문장부호 : 으로 끝나는데, 이것은 여기서 그 앞의 단어에 대한 부연설명으로 그 뒤에 문장이 이어지는 것이다.
일단 앞에 있는 부사절부터 해석해 보자. in view of this painful posssibility는 “이 고통스런 가능성의 관점에서”라는 뜻이다. this는 뭘까? possible이 앞에 나왔으므로, this는 이 맥락에서는 바로 앞에 있는 the thing이라 보는 것이 좋겠다.
그리고 I will not appeal indignantly는 “난 화내지 않을거야”라는 뜻이다. to my other writing는 “나의 다른 저작들에게”로 해석하면 되겠다. 이 사람은 아무래도 자신의 다른 작품에게 화를 내려고 했었나보다. 중간에 as I might가 있는데 이것은 사실 그 뒤에 있는 단어들이 다 생략된 것으로, “내가 다른 작품에 화를 낼 수도 있었긴 하지만”으로 해석하면 될 것이다.
이 뒤에 as a proof는 그 앞에 있는 other writings를 수식해주는데, other writings가 어떤 증명이라는 뜻이다. proof 뒤에 있는 that은 proof를 수식해주는 관계대명사 형용사절인데, “내가 그런걸 잘 할 수 없다는 증명”이 된다.
I will not (as I might) point to the strong moral purpose of this poem itself, to the arithmetical principles so cautiously inculcated in it, or to its noble teachings in Natural History–I will take the more prosaic course of simply explaining how it happened.
일단 이 부분은 to ~~으로 이어진 구문이 3개 있다. point to는 ~를 들먹이다, ~를 암시하다 그런 뜻이다. 즉, 앞부분의 문장은 이런것들을 들먹이기에는 자신이 부적합하다는 것에 대한 증거라는 뜻이 된다. 그럼 이제 이런것들이 뭐가 있는가 살펴보자. 하나는 “이 시 자체의 강한 도덕적 목적”이고, 또 하나는 “그 안에 주의깊게 심어진 수학적 원리”, 나머지 하나는 “자연사에서 배우는 숭고한 가르침”이다. 그래서 그 다음 문장이 I will take인데, 이것은 앞에 있는 I will not point랑 대조가 되어서 “대신에 난 이렇게 하겠다”는 뜻이다. take the more prosaic course는 더 평범한 길을 선택하겠다는 뜻이다. 즉, 앞에 있는 그런 거창한거 말고 좀 더 평범하게 간다는 뜻이다. 그 평범한 길은 “그게 어떻게 된건지 단순히 설명하는” 길이다.
-
Three layer optical fiber mode calculator
This program calculates optical modes in three-layered optical fiber.
Because of lack of time, user manual is not supported yet. If you want to use this code, PLEASE contact me and ask how to use.
This program requires wxPython, numpy, scipy libraries in Python 2.7.
This program is licenced under GPL v3. (
https://www.gnu.org/licenses/gpl-3.0.html
)e-mail: snowall@kaist.ac.kr / snowall@gmail.com
version:0.16
Any comment, bug-report or question is welcomed. Do not hasitate contact me.
references:
- Guided optics (Jacques Bures)
- Fundamentals of optical waveguides (Katsunari Okamoto)
- Optical fiber toolbox (https://www.mathworks.com/matlabcentral/fileexchange/27819-optical-fibre-toolbox)
changelog
v0.16
Multiprocess support
BUG: for cladding diameter <125 um AND wavelength <600 nm, result is wrong. Use this under wavelength >600 nm OR cladding diameter <100 um condition.
v0.1
The first release. This works 900~1600 nm wavelength.
-
파이썬의 요상한 문법 문제
파이썬에는 딕셔너리라는게 있는데, 참 편리한 놈이다. 여기서 원소를 불러오려면 pop과 get메소드 중에 하나를 쓰면 되는데…
a={‘abc’:1}
for i in range(10):
print a.pop(‘abc’)
위와 같은 코드는 에러가 난다.
a={‘abc’:1}
for i in range(10):
print a.get(‘abc’)
그러나 위와 같은 코드는 에러가 나지 않는다. 대체 뭐지…
위의 문제는 get과 pop의 작동 방식 차이에서 오는 것이다. get은 해당 키워드의 값을 되돌려주고 원래 자료에는 아무 일도 하지 않는다. 하지만 pop은 해당 키워드의 값을 꺼내서 되돌려주고 원래 자료에서는 없애 버린다. get은 얻어오는거고 pop은 뽑아오는 것. 이게 왜 이렇게 되었냐면, 원래 pop은 배열을 스택처럼 쓰기 위해서 그런거라 카더라.
—
다음과 같은 일도 있다.
class mytest():
m=[]
def __init__(self, **kwds):
self.m=[]
self.m+=[kwds.pop(‘xyz’)]
mya=[]
for i in range(10):
mya+=[mytest(xyz=i).m]
print mya
위의 코드와
class mytest():
m=[]
def __init__(self, **kwds):
self.m+=[kwds.pop(‘xyz’)]
mya=[]
for i in range(10):
mya+=[mytest(xyz=i).m]
print mya
위의 코드는 결과값이 다르다. 차이는 init 안에서 self.m이 있느냐 없느냐의 차이인데. 왜 차이가 나는지 모르겠다. 객체지향 따위는 갖다 버린 파이썬 같으니라고…
-
Love revolution
Love revolution (TWO-MIX)
愛する事は せつなく… 夢追う事は 辛く
사랑은 안타깝고 꿈을 ?기는 괴로워
だけど 生きてるだけの “永遠” なんていらない
하지만 그냥 살아가기만 하는 영원따위는 필요 없어Dance!! Revolution!!
見えない壁を 秉リ越えてゆく情熱
보이지 않는 벽을 넘어가는 정열Chance! Evolution!!
何度でも 蘇らせて Broken Heart
몇번이건 다시 일어서는 낙심했던 마음“出會い(ゼ-ロ)”から始めれば なくす物はないよ二人
만날때마다 새로 시작한다면 두사람은 익숙해지지 않아
全ての悲しみを 見つめてゆこう まっすぐ……
모든 슬픔을 곧바로 찾아가는 거야★求める事に 傷つき……信じる事に 迷い……
바라는 것에 상처입고, 믿는 것에 헤메이고,たけど 綺麗なだけの靑春なんていらない
하지만 예쁘기만 한 청춘따위는 필요 없어Dance!! Revolution!!
“檄しさ秘めた まなざし”を あきらめない
격한 비밀을 숨긴 눈빛을 포기하지 않아Chance! Evolution!!
傳えたい あなたに描く 愛の形を….
전하고 싶어 당신에게 그려진 사랑의 모습을….Dance!! Revolution!!
碎けた夢に手を伸ばし 抱きしめたら
부서지는 꿈에 손을 내밀어 끌어안고 싶어Chance! Evolution!
もう一度 輝かせたい Broken Heart
한 번 더 빛나고 싶은 낙심했던 마음自分を 變えたくて 變われなくて 泣いた夜も
자신을 바꾸려해도 바꾸지 못해서 울고있던 밤이라도
今なら少したけ 笑える事に氣づいた
지금이라면 살짝 웃을만한 일이지
矛盾たらけの この胸 たよりなくまだ 搖れる…….
모순투성이의 이 가슴 의지할 곳 없어 흔들려 …….
たけど 先敗(かこ)を 誇れる 未來(なにか)が 見えて來るから
하지만 지난 실수(과거)를 자랑하며 미래(무엇인가)가 보이고 있어Dance!! Revolution!!
戶感う痛み すれ違う ためらいさえ
망설이는아픔 스쳐지나감에 있어Chance! Evolution!
美しく 强さに變える 愛の力て…….
아름답게 강하게 변해 사랑의 힘으로Dance!! Revolution!!
かすかなKissのめくもりを 確かめたら
어렴풋한 키스의 따스함을 확실하게Chance! Evolution!!
もう二度と眠らせないて Broken Heart
두 번째에도 잠들지 않는 낙심했던 마음★ Repeat
—
모닝구 무스메의 Love revolution 21과는 다른 노래다.

