미친 언어다
function next_query(acqtype::Type{<:Acquisition}, boctx)
∇f = x -> begin
ForwardDiff.gradient(acq_x -> acquisition(acqtype, acq_x, boctx), x)
end
Hf = x -> begin
ForwardDiff.hessian(acq_x -> acquisition(acqtype, acq_x, boctx), x)
end
boctx.iteration += 1
return ∇f, Hf
end
얼마전에 짠 코드인데,
acquisition 은 if 문 도 있는 평범한 native 줄리아 함수임
input type 이 심파이나 매틀랩처럼 심볼릭 그런 이상한게 아니고
그냥 Float64 인데 줄리아의 미분 라이브러리들은 저걸 그냥 미분해버림;
2차 도함수 헤시안 매트릭스도 그냥 계산해버림
미친 언어야 진짜..
이게 어떻게 되지?
; return 0;
뭔진 모르겠지만 존나 어려워보임 - dc App
아니 그냥 라이브러리가 미분 해준다고 - return 0;
사실 컴파일할때마다 MIT 대학원생이 일일이 미분함
그냥 수치해석적 계산이면 이론적으로 어려운건 하나도 읍는뎅 좋은 함수면
if for 잔뜩 들어있는 함수인데? ㅋㅅㅋ - return 0;
if for가 문제가 아니라 그냥 결과값만 받으면 끝이라서. diff forward면 작은 h잡아서 (f(x+h)-f(x))/h 해준값 주는거뿐임
ㄴㄴ finite difference 를 하는게 아니고 symbolic differentiation 해서 아예 도함수 함수를 뽑는거임 - return 0;
그 forward 가 아님 forward mode automatic differentiation 이라고 따로 있음. Nocedal 최적화 책에 보면 설명돼있음 - return 0;
그냥 임의의 float output function을 받으면 그걸 symbolic으로 explicit하게 준다고?? 원래함수가 explicit하지 않아도?
그니까 미쳤지 ㅋㅋㅋ - return 0;
미분한 함수의 explicit한 함수의 형태를 볼 수 있음?? 애초에 원리상으로 불가능할텐데 걍 미분한 함수의 output도 float거나 넣는 함수들 자체가 explicit한 함수들의 조합인거 아님?
라이브러리 안에서 넣는 함수의 AST 를 뽑은 다음에 거기서 여차저차 분석해서 미분해버린다는듯 함 - return 0;
그니까 Julia로 짠 (explicit들의 조합으로되니 함수를 쳐넣으면 구조를 저 라이브러리가 알아서 분석해서 뽑아준다는건가 정말 유저편의를 극대화시켜버렸네
ㅇㅇ - return 0;
for 루프의 수가 변하거나 하는경우도 미분해줌? 그리고 sign은 미분하면 어케 나오는지 궁금한데
코건 모르겠음 안 해봄 - return 0;
for가 변하는건 에러를 띄워야하는게 맞음 sign이 좀 궁금함 if도 걍 sign으로 처리하면 되는거라서
긍께, autodiff 해준다 이거? Acquisition 에서 다 정의되어 있으면 autodiff 해 주는거 될듯도 한듸...