a ∨ b 라는 절이 있으면 둘 다 0이 되면 안 되는 상황이기 때문에 손실함수에 0, 0을 넣었을 때의 값이 커지도록 손실함수를 정의하고 경사하강법으로 답을 찾으려고 합니다.
예를 들어 a ∨ b, b ∨ c가 있으면 f = (1-a)(1-b)+(1-b)(1-c)로 정의할 수 있겠죠. (a ∨ b ∨ c 라면 f = (1-a)(1-b)(1-c))
근데 경사하강법을 쓰려면 convex해야 하므로 최종적으로 (a-0.5)^2 + (b-0.5)^2 + (c-0.5)^2 등을 추가해줍니다.
그리고 초기값을 전부 0.5로 두고 시작해서 수렴했을 때, 가장 0.5에서 멀리 떨어진 변수 하나를 0 혹은 1로 확정하고 그걸 이용해서 원래 CNF를 단순화한 다음에 다시 손실함수를 정의하고 위의 과정을 반복합니다.
(1-x)(1-y) 대신 ((1-x)(1-y))^2, -ln(1-(1-x)(1-y))를 쓰기도 하고, convex하게 만들기 위해 추가해준 것도 거기에 스칼라배를 하거나, -ln(x)-ln(1-x), xln(x)+(1-x)ln(1-x)를 사용하기도 했습니다. 딥러닝에서 쓰는 방법처럼 모멘텀 개념을 써보기도 했습니다.
그렇게 해서 가장 고득점한 것이 172/204인데 여기서 더 어떻게 해야 할지 모르겠습니다. 이런 방법으로 접근하는 이론이나 논문이 있는지도 궁금합니다.