I'm studying CRFs recently, and I've read some codes of implementations of general CRFs such as CRF(Java), Mallet, CRFSuite. I found DGM is best for me, which is quite clearly in coding.
During studying the DGM source codes, I come across some questions:
- When adding/setting arcs in building a graph, why the edge potential is square rooted?
(#186 and #196 in ./modules/DGM/Graph.cpp)
- In message passing algorithms, why the new msg is double multiplied by edge potential?
(#80 in ./modules/DGM/MessagePassing.cpp)